Exemplo n.º 1
0
        /// <summary>
        /// Сохранение предложений в БД
        /// </summary>
        /// <returns></returns>
        private void InsertSents(List <SentenceMap> sentlist)
        {
            for (int k = 0; k < sentlist.Count; k++)
            {
                var sent  = sentlist[k];
                var ph_id = dbConnector.InsertPhraseDB(paragraphID, sent.Order);
                var nodes = sent.GetTreeList();
                // Сохранение слов предложения в БД
                for (int i = 0; i < sent.Capasity; i++)
                {
                    var word  = sent.GetWordByOrder(i);
                    var lx_id = dbConnector.SaveLex(word.EntryName.ToLower(), word.ID_PartOfSpeech);
                    var rw_id = dbConnector.SaveRealWord(word.RealWord);
                    var c_id  = dbConnector.InsertWordDB(ph_id, lx_id, word.order, word.rcind, rw_id);
                    word.WordID = c_id;
                    //Сохранение "неопределённого" слова
                    long mu_id = 0;
                    if (word.rcind > 0)
                    {
                        mu_id = dbConnector.SaveUndefWord(word.RealWord, rw_id);
                    }

                    //Сохранение термина
                    var termlist = new List <TermStruct>();
                    var term     = new TermStruct();
                    term.order  = 0;
                    term.rcind  = word.rcind;
                    term.lem_id = word.rcind == 0 ? lx_id : mu_id;
                    termlist.Add(term);
                    dbConnector.SaveTermin(termlist);
                    // Сохранение граммем слова в БД
                    var grammems = word.GetPairs();
                    var keys     = grammems.Keys;
                    foreach (var key in keys)
                    {
                        dbConnector.InsertGrammemDB(c_id, key, grammems[key]);
                    }
                }
                // Сохранение списка синтаксических связей предложения в БД
                // Связи сохраняются отдельно, потому что в них есть ссылки на родительские слова.
                // Поэтому сначала сохраняются все слова, а зетем связи
                for (int i = 0; i < sent.Capasity; i++)
                {
                    var word = sent.GetWordByOrder(i);
                    // Определение узла в синтаксическом дереве предложения по порядковому номеру слова в предложении.
                    var cnt = nodes.Where(x => x.index == word.order).Count();
                    if (cnt > 0)
                    {
                        var  node       = nodes.Where(x => x.index == word.order).First();
                        var  parentWord = sent.GetWordByOrder(node.parentind);
                        long WordID     = -1;
                        if (parentWord != null)
                        {
                            WordID = parentWord.WordID;
                        }
                        dbConnector.InsertSyntNodesDB(word.WordID, node.linktype, node.Level, WordID);
                    }
                }
            }
        }