Exemplo n.º 1
0
        /// <summary>
        /// Восстановление предложения из грамматических характеристик каждого слова
        /// с использованием обобщённой функции sol_GenerateWordformsFX.
        /// </summary>
        public string RestoreSentenceOnePass(SentenceMap sentence)
        {
            if (sentence == null)
            {
                return("");
            }

            // Перечень характеристик, нужных для восстановления слова по словоформе
            var props = new GrenProperty[] { GrenProperty.NUMBER_ru, GrenProperty.CASE_ru,
                                             GrenProperty.GENDER_ru, GrenProperty.TENSE_ru, GrenProperty.PERSON_ru,
                                             GrenProperty.FORM_ru, GrenProperty.SHORTNESS_ru, GrenProperty.COMPAR_FORM_ru };
            var sb     = new StringBuilder();
            var coords = new ArrayList();
            var states = new ArrayList();

            for (int i = 0; i < sentence.Capasity; i++)
            {
                var wmap = sentence.GetWordByOrder(i);
                coords.Clear();
                states.Clear();

                foreach (var prop in props)
                {
                    var val = wmap.GetPropertyValue(prop);
                    if (val > -1)
                    {
                        coords.Add((int)prop);
                        states.Add((int)val);
                    }
                }

                // Проверка ID_Entry (В БД не хранится ID_Entry)
                int entry_id = GrammarEngine.sol_FindEntry(hEngine, wmap.EntryName, wmap.ID_PartOfSpeech, GrammarEngineAPI.RUSSIAN_LANGUAGE);
                //if( entry_id==-1 )
                string    word = "";
                ArrayList fx   = GrammarEngine.sol_GenerateWordformsFX(hEngine, entry_id, coords, states);
                //ArrayList fx = GrammarEngine.sol_GenerateWordformsFX(hEngine, wmap.ID_Entry, coords, states);
                if (fx != null && fx.Count > 0)
                {
                    word = (fx[0] as String).ToLower();
                }

                if (word != "")
                {
                    if (i == 0)
                    {
                        word = char.ToUpper(word[0]) + word.Substring(1);
                    }
                    if (i > 0 && i < sentence.Capasity && wmap.ID_PartOfSpeech != GrammarEngineAPI.PUNCTUATION_class)
                    {
                        sb.Append(" ");
                    }
                    sb.Append(word);
                }
            }

            return(sb.ToString());
        }
Exemplo n.º 2
0
 public int GetPropertyValue(GrenProperty property)
 {
     if (pairs.ContainsKey((int)property))
     {
         return(pairs[(int)property]);
     }
     else
     {
         return(-1);
     }
 }