def get_parser(
            parser_type: ParserType,
            language_config: NumberParserConfiguration) -> BaseNumberParser:
        parser = BaseNumberParser(language_config)

        chinese = isinstance(language_config, ChineseNumberParserConfiguration)
        japanese = isinstance(language_config,
                              JapaneseNumberParserConfiguration)

        if chinese:
            parser = CJKNumberParser(language_config)
        elif japanese:
            parser = CJKNumberParser(language_config)

        if parser_type is ParserType.CARDINAL:
            parser.supported_types = [
                Constants.SYS_NUM_CARDINAL, Constants.SYS_NUM_INTEGER,
                Constants.SYS_NUM_DOUBLE
            ]
        elif parser_type is ParserType.DOUBLE:
            parser.supported_types = [Constants.SYS_NUM_DOUBLE]
        elif parser_type is ParserType.FRACTION:
            parser.supported_types = [Constants.SYS_NUM_FRACTION]
        elif parser_type is ParserType.INTEGER:
            parser.supported_types = [Constants.SYS_NUM_INTEGER]
        elif parser_type is ParserType.ORDINAL:
            parser.supported_types = [Constants.SYS_NUM_ORDINAL]
        elif parser_type is ParserType.PERCENTAGE and not chinese:
            parser = BasePercentageParser(language_config)

        return parser
 def __init__(self, config):
     self._duration_extractor = BaseDurationExtractor(
         PortugueseDurationExtractorConfiguration(), False)
     self._cardinal_extractor: BaseNumberExtractor = PortugueseCardinalExtractor(
     )
     self._number_parser: BaseNumberParser = BaseNumberParser(
         PortugueseNumberParserConfiguration())
     self._followed_unit: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.FollowedUnit)
     self._suffix_and_regex: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.SuffixAndRegex)
     self._number_combined_with_unit: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.DurationNumberCombinedWithUnit)
     self._an_unit_regex: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.AnUnitRegex)
     self._all_date_unit_regex: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.AllRegex)
     self._half_date_unit_regex: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.HalfRegex)
     self._inexact_number_unit_regex: Pattern = RegExpUtility.get_safe_reg_exp(
         PortugueseDateTime.InexactNumberUnitRegex)
     self._unit_map: Dict[str, str] = PortugueseDateTime.UnitMap
     self._unit_value_map: Dict[str, int] = PortugueseDateTime.UnitValueMap
     self._double_numbers: Dict[str,
                                float] = PortugueseDateTime.DoubleNumbers