예제 #1
0
        public ParseResult Parse(ExtractResult extResult)
        {
            ParseResult pr;

            if (extResult.Data is List <ExtractResult> )
            {
                pr = MergeCompoundUnit(extResult);
            }
            else
            {
                pr = numberWithUnitParser.Parse(extResult);
                var value = pr.Value as UnitValue;

                Config.CurrencyNameToIsoCodeMap.TryGetValue(value?.Unit, out var mainUnitIsoCode);
                if (string.IsNullOrEmpty(mainUnitIsoCode) || mainUnitIsoCode.StartsWith(Constants.FAKE_ISO_CODE_PREFIX, StringComparison.Ordinal))
                {
                    pr.Value = new UnitValue
                    {
                        Unit   = value?.Unit,
                        Number = value?.Number,
                    };
                }
                else
                {
                    pr.Value = new CurrencyUnitValue
                    {
                        Unit        = value?.Unit,
                        Number      = value?.Number,
                        IsoCurrency = mainUnitIsoCode,
                    };
                }
            }

            return(pr);
        }
        public ParseResult Parse(ExtractResult extResult)
        {
            ParseResult pr;

            if (extResult.Data is List <ExtractResult> )
            {
                pr = MergeMultiplier(extResult);
                if (pr == null)
                {
                    pr = MergeCompoundUnit(extResult);
                }
            }
            else
            {
                pr = numberWithUnitParser.Parse(extResult);
                var value = pr.Value as UnitValue;

                // Parse unit like "MUSD" that resolves to "1 million USD"
                if (extResult.Data is ExtractResult)
                {
                    var data    = (ExtractResult)extResult.Data;
                    var unitStr = extResult.Text.Replace(data.Text, string.Empty).Trim();
                    if (this.Config.MultiplierIsoCodeList.Contains(unitStr) && float.TryParse(value?.Number, out var number))
                    {
                        value.Number = (number * 1000000).ToString("G15", CultureInfo.InvariantCulture);
                        pr.Value     = new UnitValue
                        {
                            Unit   = value?.Unit,
                            Number = value?.Number,
                        };
                    }
                }

                Config.CurrencyNameToIsoCodeMap.TryGetValue(value?.Unit, out var mainUnitIsoCode);
                if (string.IsNullOrEmpty(mainUnitIsoCode) || mainUnitIsoCode.StartsWith(Constants.FAKE_ISO_CODE_PREFIX, StringComparison.Ordinal))
                {
                    pr.Value = new UnitValue
                    {
                        Unit   = value?.Unit,
                        Number = value?.Number,
                    };
                }
                else
                {
                    pr.Value = new CurrencyUnitValue
                    {
                        Unit        = value?.Unit,
                        Number      = value?.Number,
                        IsoCurrency = mainUnitIsoCode,
                    };
                }
            }

            return(pr);
        }
예제 #3
0
        public ParseResult Parse(ExtractResult extResult)
        {
            ParseResult pr;

            // For now only currency model recognizes compound units.
            if (extResult.Type.Equals(Constants.SYS_UNIT_CURRENCY, StringComparison.Ordinal))
            {
                pr = new BaseCurrencyParser(Config).Parse(extResult);
            }
            else
            {
                pr = numberWithUnitParser.Parse(extResult);
            }

            return(pr);
        }