/// <summary>
        /// Extracts and parses the day number from the given regex Match instance.
        /// </summary>
        /// <param name="m">The regex Match instance to extract day number from.</param>
        /// <returns></returns>
        private int ExtractDayNum(Match m)
        {
            int dayNum = -1;

            foreach (Capture c in m.Groups["DayNum"].Captures)
            {
                string value = c.Value;
                if (Char.IsDigit(value[0]))
                {
                    int n;
                    value = ParsingUtils.ConvertNumber2English(value);
                    if (Int32.TryParse(value, out n))
                    {
                        dayNum = n;
                    }
                    else
                    {
                        dayNum = -1;
                    }
                }
                else
                {
                    dayNum = -1;
                    foreach (PersianNumberPatternInfo pi in persianNumberParser.FindAndParse(c.Value))
                    {
                        dayNum = (int)pi.Number;
                    }
                }
            }

            return(dayNum);
        }
        /// <summary>
        /// Extracts and parses the week-day from the given regex Match instance.
        /// </summary>
        /// <param name="m">The regex Match instance to extract week-day from.</param>
        /// <returns></returns>
        private Weekdays ExtractWeekday(Match m)
        {
            Weekdays w = Weekdays.Illeagal;

            foreach (Capture c in m.Groups["Weekday"].Captures)
            {
                if (c.Value == "جمعه")
                {
                    w = Weekdays.Fri;
                }
                if (c.Value == "شنبه")
                {
                    w = Weekdays.Sat;
                }
                else
                {
                    foreach (Capture cc in m.Groups["WeekdayNum"].Captures)
                    {
                        string value = cc.Value;
                        if (Char.IsDigit(value[0]))
                        {
                            int n;
                            value = ParsingUtils.ConvertNumber2English(value);
                            if (Int32.TryParse(value, out n))
                            {
                                w = NthWeekday(n);
                            }
                            else
                            {
                                w = Weekdays.Illeagal;
                            }
                        }
                        else
                        {
                            Int64 n;
                            if (PersianLiteral2NumMap.TryPersianString2Num(value, out n))
                            {
                                w = NthWeekday((int)n);
                            }
                            else
                            {
                                w = Weekdays.Illeagal;
                            }
                        }
                    }
                }
            }

            return(w);
        }
Example #3
0
        /// <summary>
        /// Extracts and parses the three digit block from the specified string.
        /// </summary>
        /// <param name="str">The string to extract number from.</param>
        /// <returns></returns>
        private long ExtractThreeDB(string str)
        {
            long num     = 0L;
            long tempNum = 0L;

            if (Char.IsDigit(str[0]))
            {
                string strNum = ParsingUtils.ConvertNumber2English(str.Trim());
                int    n;
                if (Int32.TryParse(strNum, out n))
                {
                    num = (long)n;
                }
            }
            else
            {
                Regex regex = new Regex(ThreeDigitBlockPattern());
                foreach (Match m in regex.Matches(str))
                {
                    foreach (Capture c in m.Groups[ONES_NAME].Captures)
                    {
                        if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum))
                        {
                            num += tempNum;
                        }
                    }

                    foreach (Capture c in m.Groups[TENS_NAME].Captures)
                    {
                        if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum))
                        {
                            num += tempNum;
                        }
                    }

                    foreach (Capture c in m.Groups[TENONES_NAME].Captures)
                    {
                        if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum))
                        {
                            num += tempNum;
                        }
                    }

                    num += ExtractHundreds(m);
                }
            }
            return(num);
        }
Example #4
0
        /// <summary>
        /// Searches the specified string for digitized number patterns, and tries to parse the patterns found.
        /// </summary>
        /// <param name="str">The string to be searched.</param>
        /// <returns>A sequence of <see cref="DigitizedNumberPatternInfo"/> objects which contain
        /// information about the patterns found.</returns>
        public IEnumerable <DigitizedNumberPatternInfo> FindAndParse(string str)
        {
            var l = new List <DigitizedNumberPatternInfo>();

            var wordTokenizer = new WordTokenizer(WordTokenizerOptions.None);

            foreach (var wordInfo in wordTokenizer.Tokenize(str))
            {
                if (wordInfo.IsNumber)
                {
                    var    refinedWord = PostProcessNumberWordInfo(wordInfo);
                    double result;
                    if (Double.TryParse(ParsingUtils.ConvertNumber2English(refinedWord.Value), out result))
                    {
                        l.Add(new DigitizedNumberPatternInfo(refinedWord.Value, refinedWord.Index, refinedWord.Length, result));
                    }
                }
            }

            return(l);
        }
Example #5
0
        /// <summary>
        /// Extracts and parses the day number.
        /// </summary>
        /// <param name="m">The regex Match object to parse.</param>
        /// <returns></returns>
        private int ExtractDayNum(Match m)
        {
            int dayNum = -1;

            foreach (Capture c in m.Groups["DayNum"].Captures)
            {
                string value = c.Value;
                if (Char.IsDigit(value[0]))
                {
                    int n;
                    value = ParsingUtils.ConvertNumber2English(value);
                    if (Int32.TryParse(value, out n))
                    {
                        dayNum = n;
                    }
                    else
                    {
                        dayNum = -1;
                    }
                }
            }

            return(dayNum);
        }