/// <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); } } } }