private void _processInserts() { const string openBracket = "("; const string closeBracket = ")"; var openBracketCount = _textElements.Count(x => x == openBracket); var closedBracketCount = _textElements.Count(x => x == closeBracket); Debug.Assert(openBracketCount == closedBracketCount); Log.InfoFormat($"Обработка входящей строки предложения: значение до: '{InitialText}'"); // обрабатываем простой случай, когда нет вложенных скобок while (_textElements.Any(x => x == openBracket)) { var openBracketOrder = _textElements.IndexOf(openBracket); var closedBracketOrder = _textElements.IndexOf(closeBracket); Debug.Assert(closedBracketOrder > openBracketOrder); if (closedBracketOrder - openBracketOrder > 0) { var insertText = string.Join(" ", _textElements.Skip(openBracketOrder + 1).Take(closedBracketOrder - openBracketOrder - 1)); Log.InfoFormat($"Обработка входящей строки предложения: найдена вставка '{insertText}'."); SentenceIndexInfo.Info2 = IndexInfoInserts.InsertsPresented; RemovedTextElementsInfo = new RemovedTextElementsInfo(); var removedTextElementInfo = new RemovedTextElementInfo() { Type = RemovedTextElementType.BeforeInsert, ElementOrder = openBracketOrder, ElementsCount = closedBracketOrder - openBracketOrder }; RemovedTextElementsInfo.Add(removedTextElementInfo); Log.InfoFormat($"Создан объект вставки для '{GetInsertText(removedTextElementInfo)}'."); Log.InfoFormat($"Земена открывающей скобки '{_textElements[openBracketOrder - 1]} {_textElements[openBracketOrder]} {_textElements[openBracketOrder + 1]}' на запятую."); _textElements[openBracketOrder] = ","; _textElements.RemoveAt(closedBracketOrder); } InitialText = string.Join(" ", _textElements); _readTextElements(); } Log.InfoFormat($"Обработка входящей строки предложения: значение после: '{InitialText}'"); }
internal static List<SentenceElement> GetSentenceElements(RemovedTextElementInfo insert, Sentence sentence) { return sentence.Elements.Skip(insert.ElementOrder).Take(insert.ElementsCount).ToList(); }
public string GetInsertText(RemovedTextElementInfo insertInfo) { return string.Join(" ", _textElements.Skip(insertInfo.ElementOrder + 1).Take(insertInfo.ElementsCount)); }
public void AddInsert(Sentence sentence, RemovedTextElementInfo insert, List<int> insertsAreUps, SentenceElement upWordOutOfInsert, SentenceElement firstWord) { _items.Add(new Insert(sentence, insert, insertsAreUps, upWordOutOfInsert, firstWord)); }