Пример #1
0
        /// <summary>
        /// Converts the given Roman numeral string into (word) Items in the WordRelation.
        /// </summary>
        /// <param name="romanString">The roman numeral string.</param>
        private void RomanToWords(string romanString)
        {
            string punctuation = (string)_tokenItem.FindFeature("p.punc");

            if (punctuation.Equals(""))
            {
                /* no preceeding punctuation */
                //string n = String.valueOf(NumberExpander.expandRoman(romanString));
                var n = NumberExpander.ExpandRoman(romanString).ToString(CultureInfo.InvariantCulture);

                if (KingLike(_tokenItem))
                {
                    _wordRelation.AddWord("the");
                    NumberExpander.ExpandOrdinal(n, _wordRelation);
                }
                else if (SectionLike(_tokenItem))
                {
                    NumberExpander.ExpandNumber(n, _wordRelation);
                }
                else
                {
                    NumberExpander.ExpandLetters(romanString, _wordRelation);
                }
            }
            else
            {
                NumberExpander.ExpandLetters(romanString, _wordRelation);
            }
        }
Пример #2
0
        /// <summary>
        /// Convert the given digit token into (word) Items in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The digit string.</param>
        private void DigitsToWords(string tokenVal)
        {
            FeatureSet featureSet = _tokenItem.Features;
            string     nsw        = "";

            if (featureSet.IsPresent("nsw"))
            {
                nsw = featureSet.GetString("nsw");
            }

            if (nsw.Equals("nide"))
            {
                NumberExpander.ExpandId(tokenVal, _wordRelation);
            }
            else
            {
                string rName      = featureSet.GetString("name");
                string digitsType = null;

                if (tokenVal.Equals(rName))
                {
                    digitsType = (string)_cart.Interpret(_tokenItem);
                }
                else
                {
                    featureSet.SetString("name", tokenVal);
                    digitsType = (string)_cart.Interpret(_tokenItem);
                    featureSet.SetString("name", rName);
                }

                if (digitsType.Equals("ordinal"))
                {
                    NumberExpander.ExpandOrdinal(tokenVal, _wordRelation);
                }
                else if (digitsType.Equals("digits"))
                {
                    NumberExpander.ExpandDigits(tokenVal, _wordRelation);
                }
                else if (digitsType.Equals("year"))
                {
                    NumberExpander.ExpandId(tokenVal, _wordRelation);
                }
                else
                {
                    NumberExpander.ExpandNumber(tokenVal, _wordRelation);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Convert the given digit token into (word) Items in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The digit string.</param>
        private void digitsToWords(string tokenVal)
        {
            FeatureSet featureSet = tokenItem.getFeatures();
            string     nsw        = "";

            if (featureSet.isPresent("nsw"))
            {
                nsw = featureSet.getString("nsw");
            }

            if (nsw.Equals("nide"))
            {
                NumberExpander.expandID(tokenVal, wordRelation);
            }
            else
            {
                string rName      = featureSet.getString("name");
                string digitsType = null;

                if (tokenVal.Equals(rName))
                {
                    digitsType = (string)cart.interpret(tokenItem);
                }
                else
                {
                    featureSet.setString("name", tokenVal);
                    digitsType = (string)cart.interpret(tokenItem);
                    featureSet.setString("name", rName);
                }

                if (digitsType.Equals("ordinal"))
                {
                    NumberExpander.expandOrdinal(tokenVal, wordRelation);
                }
                else if (digitsType.Equals("digits"))
                {
                    NumberExpander.expandDigits(tokenVal, wordRelation);
                }
                else if (digitsType.Equals("year"))
                {
                    NumberExpander.expandID(tokenVal, wordRelation);
                }
                else
                {
                    NumberExpander.expandNumber(tokenVal, wordRelation);
                }
            }
        }
Пример #4
0
        /// <summary>
        ///  Convert the given digit token with dashes (e.g. 999-999-999) into (word)
        /// Items in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The digit string.</param>
        private void DigitsDashToWords([In] string tokenVal)
        {
            int tokenLength = tokenVal.Length;
            int a           = 0;

            for (int p = 0; p <= tokenLength; p++)
            {
                if (p == tokenLength || tokenVal[p] == '-')
                {
                    string aaa = tokenVal.JSubString(a, p);
                    NumberExpander.ExpandDigits(aaa, _wordRelation);
                    _wordRelation.AddBreak();
                    a = p + 1;
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Convert the given digits/digits string into word (Items) in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The digits/digits string.</param>
        private void DigitsSlashDigitsToWords([In] string tokenVal)
        {
            /* might be fraction, or not */
            int    index = tokenVal.IndexOf('/');
            string aaa   = tokenVal.JSubString(0, index);
            string bbb   = tokenVal.Substring(index + 1);
            int    a;

            // if the previous token is a number, add an "and"
            if (Matches(DigitsPattern, (string)_tokenItem.FindFeature("p.name")) &&
                _tokenItem.GetPrevious() != null)
            {
                _wordRelation.AddWord("and");
            }

            if (aaa.Equals("1") && bbb.Equals("2"))
            {
                _wordRelation.AddWord("a");
                _wordRelation.AddWord("half");
            }
            else if ((a = int.Parse(aaa, CultureInfo.InvariantCulture.NumberFormat)) < (int.Parse(bbb, CultureInfo.InvariantCulture.NumberFormat)))
            {
                NumberExpander.ExpandNumber(aaa, _wordRelation);
                NumberExpander.ExpandOrdinal(bbb, _wordRelation);
                if (a > 1)
                {
                    _wordRelation.AddWord("'s");
                }
            }
            else
            {
                NumberExpander.ExpandNumber(aaa, _wordRelation);
                _wordRelation.AddWord("slash");
                NumberExpander.ExpandNumber(bbb, _wordRelation);
            }
        }
Пример #6
0
        /// <summary>
        /// Convert the given digits/digits string into word (Items) in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The digits/digits string.</param>
        private void digitsSlashDigitsToWords([In] string tokenVal)
        {
            /* might be fraction, or not */
            int    index = tokenVal.IndexOf('/');
            string aaa   = tokenVal.Substring(0, index);
            string bbb   = tokenVal.Substring(index + 1);
            int    a;

            // if the previous token is a number, add an "and"
            if (matches(digitsPattern, (string)tokenItem.findFeature("p.name")) &&
                tokenItem.getPrevious() != null)
            {
                wordRelation.addWord("and");
            }

            if (aaa.Equals("1") && bbb.Equals("2"))
            {
                wordRelation.addWord("a");
                wordRelation.addWord("half");
            }
            else if ((a = int.Parse(aaa)) < (int.Parse(bbb)))
            {
                NumberExpander.expandNumber(aaa, wordRelation);
                NumberExpander.expandOrdinal(bbb, wordRelation);
                if (a > 1)
                {
                    wordRelation.addWord("'s");
                }
            }
            else
            {
                NumberExpander.expandNumber(aaa, wordRelation);
                wordRelation.addWord("slash");
                NumberExpander.expandNumber(bbb, wordRelation);
            }
        }
Пример #7
0
        /// <summary>
        /// Converts US money string into (word) Items in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">The US money string.</param>
        private void UsMoneyToWords(string tokenVal)
        {
            int dotIndex = tokenVal.IndexOf('.');

            if (Matches(IllionPattern, (string)_tokenItem.FindFeature("n.name")))
            {
                NumberExpander.ExpandReal(tokenVal.Substring(1), _wordRelation);
            }
            else if (dotIndex == -1)
            {
                string aaa = tokenVal.Substring(1);
                TokenToWords(aaa);
                if (aaa.Equals("1"))
                {
                    _wordRelation.AddWord("dollar");
                }
                else
                {
                    _wordRelation.AddWord("dollars");
                }
            }
            else if (dotIndex == (tokenVal.Length - 1) ||
                     (tokenVal.Length - dotIndex) > 3)
            {
                // Simply read as mumble point mumble.
                NumberExpander.ExpandReal(tokenVal.Substring(1), _wordRelation);
                _wordRelation.AddWord("dollars");
            }
            else
            {
                string aaa = tokenVal.JSubString(1, dotIndex).Replace(",", "");
                string bbb = tokenVal.Substring(dotIndex + 1);

                NumberExpander.ExpandNumber(aaa, _wordRelation);

                if (aaa.Equals("1"))
                {
                    _wordRelation.AddWord("dollar");
                }
                else
                {
                    _wordRelation.AddWord("dollars");
                }

                if (bbb.Equals("00"))
                {
                    // Add nothing to the word list.
                }
                else
                {
                    NumberExpander.ExpandNumber(bbb, _wordRelation);
                    if (bbb.Equals("01"))
                    {
                        _wordRelation.AddWord("cent");
                    }
                    else
                    {
                        _wordRelation.AddWord("cents");
                    }
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Converts the given Token into (word) Items in the WordRelation.
        /// </summary>
        /// <param name="tokenVal">the string value of the token, which may or may not be
        /// same as the one in called "name" in flite</param>
        private void TokenToWords(string tokenVal)
        {
            FeatureSet tokenFeatures = _tokenItem.Features;
            string     itemName      = tokenFeatures.GetString("name");
            int        tokenLength   = tokenVal.Length;

            if (tokenFeatures.IsPresent("phones"))
            {
                _wordRelation.AddWord(tokenVal);
            }
            else if ((tokenVal.Equals("a") || tokenVal.Equals("A")) &&
                     ((_tokenItem.GetNext() == null) ||
                      !(tokenVal.Equals(itemName)) || !(((string)_tokenItem
                                                         .FindFeature("punc")).Equals(""))))
            {
                /* if A is a sub part of a token, then its ey not ah */
                _wordRelation.AddWord("_a");
            }
            else if (Matches(AlphabetPattern, tokenVal))
            {
                if (Matches(RomanNumbersPattern, tokenVal))
                {
                    /* XVIII */
                    RomanToWords(tokenVal);
                }
                else if (Matches(IllionPattern, tokenVal) &&
                         Matches(UsMoneyPattern,
                                 (string)_tokenItem.FindFeature("p.name")))
                {
                    /* $ X -illion */
                    _wordRelation.AddWord(tokenVal);
                    _wordRelation.AddWord("dollars");
                }
                else if (Matches(DrStPattern, tokenVal))
                {
                    /* St Andrew's St, Dr King Dr */
                    DrStToWords(tokenVal);
                }
                else if (tokenVal.Equals("Mr"))
                {
                    _tokenItem.Features.SetString("punc", "");
                    _wordRelation.AddWord("mister");
                }
                else if (tokenVal.Equals("Mrs"))
                {
                    _tokenItem.Features.SetString("punc", "");
                    _wordRelation.AddWord("missus");
                }
                else if (tokenLength == 1 &&
                         char.IsUpper(tokenVal[0]) &&
                         ((string)_tokenItem.FindFeature("n.whitespace"))
                         .Equals(" ") &&
                         char.IsUpper(((string)_tokenItem
                                       .FindFeature("n.name"))[0]))
                {
                    tokenFeatures.SetString("punc", "");
                    string aaa = tokenVal.ToLower();
                    if (aaa.Equals("a"))
                    {
                        _wordRelation.AddWord("_a");
                    }
                    else
                    {
                        _wordRelation.AddWord(aaa);
                    }
                }
                else if (IsStateName(tokenVal))
                {
                    /*
                     * The name of a US state isStateName() has already added the
                     * full name of the state, so we're all set.
                     */
                }
                else if (tokenLength > 1 && !IsPronounceable(tokenVal))
                {
                    /* Need common exception list */
                    /* unpronouncable list of alphas */
                    NumberExpander.ExpandLetters(tokenVal, _wordRelation);
                }
                else
                {
                    /* just a word */
                    _wordRelation.AddWord(tokenVal.ToLower());
                }
            }
            else if (Matches(DottedAbbrevPattern, tokenVal))
            {
                /* U.S.A. */
                // remove all dots
                NumberExpander.ExpandLetters(tokenVal.Replace(".", ""),
                                             _wordRelation);
            }
            else if (Matches(CommaIntPattern, tokenVal))
            {
                /* 99,999,999 */
                NumberExpander.ExpandReal(tokenVal.Replace(",", "").Replace("'", ""), _wordRelation);
            }
            else if (Matches(SevenPhoneNumberPattern, tokenVal))
            {
                /* 234-3434 telephone numbers */
                int    dashIndex = tokenVal.IndexOf('-');
                string aaa       = tokenVal.JSubString(0, dashIndex);
                string bbb       = tokenVal.Substring(dashIndex + 1);

                NumberExpander.ExpandDigits(aaa, _wordRelation);
                _wordRelation.AddBreak();
                NumberExpander.ExpandDigits(bbb, _wordRelation);
            }
            else if (MatchesPartPhoneNumber(tokenVal))
            {
                /* part of a telephone number */
                var punctuation = (string)_tokenItem.FindFeature("punc");
                if (punctuation.Equals(""))
                {
                    _tokenItem.Features.SetString("punc", ",");
                }
                NumberExpander.ExpandDigits(tokenVal, _wordRelation);
                _wordRelation.AddBreak();
            }
            else if (Matches(NumberTimePattern, tokenVal))
            {
                /* 12:35 */
                int    colonIndex = tokenVal.IndexOf(':');
                string aaa        = tokenVal.JSubString(0, colonIndex);
                string bbb        = tokenVal.Substring(colonIndex + 1);

                NumberExpander.ExpandNumber(aaa, _wordRelation);
                if (!(bbb.Equals("00")))
                {
                    NumberExpander.ExpandId(bbb, _wordRelation);
                }
            }
            else if (Matches(Digits2DashPattern, tokenVal))
            {
                /* 999-999-999 */
                DigitsDashToWords(tokenVal);
            }
            else if (Matches(DigitsPattern, tokenVal))
            {
                DigitsToWords(tokenVal);
            }
            else if (tokenLength == 1 &&
                     char.IsUpper(tokenVal[0]) &&
                     ((string)_tokenItem.FindFeature("n.whitespace"))
                     .Equals(" ") &&
                     char.IsUpper(((string)_tokenItem
                                   .FindFeature("n.name"))[0]))
            {
                tokenFeatures.SetString("punc", "");
                string aaa = tokenVal.ToLower();
                if (aaa.Equals("a"))
                {
                    _wordRelation.AddWord("_a");
                }
                else
                {
                    _wordRelation.AddWord(aaa);
                }
            }
            else if (Matches(DoublePattern, tokenVal))
            {
                NumberExpander.ExpandReal(tokenVal, _wordRelation);
            }
            else if (Matches(OrdinalPattern, tokenVal))
            {
                /* explicit ordinals */
                string aaa = tokenVal.JSubString(0, tokenLength - 2);
                NumberExpander.ExpandOrdinal(aaa, _wordRelation);
            }
            else if (Matches(UsMoneyPattern, tokenVal))
            {
                /* US money */
                UsMoneyToWords(tokenVal);
            }
            else if (tokenLength > 0 && tokenVal[tokenLength - 1] == '%')
            {
                /* Y% */
                TokenToWords(tokenVal.JSubString(0, tokenLength - 1));
                _wordRelation.AddWord("percent");
            }
            else if (Matches(NumessPattern, tokenVal))
            {
                NumberExpander.ExpandNumess(tokenVal.JSubString(0, tokenLength - 1), _wordRelation);
            }
            else if (Matches(DigitsSlashDigitsPattern, tokenVal) && tokenVal.Equals(itemName))
            {
                DigitsSlashDigitsToWords(tokenVal);
            }
            else if (tokenVal.IndexOf('-') != -1)
            {
                DashToWords(tokenVal);
            }
            else if (tokenLength > 1 && !Matches(AlphabetPattern, tokenVal))
            {
                NotJustAlphasToWords(tokenVal);
            }
            else if (tokenVal.Equals("&"))
            {
                // &
                _wordRelation.AddWord("and");
            }
            else if (tokenVal.Equals("-"))
            {
                // Skip it
            }
            else
            {
                // Just a word.
                _wordRelation.AddWord(tokenVal.ToLower());
            }
        }