Esempio n. 1
0
        public void ReplaceWordsBy(int length, string replacement)
        {
            var words = GetWordsBy(length).ToList();

            var positions = Enumerable.Range(FirstItemPosition, LastItemPosition - FirstItemPosition)
                            .Where(p => words.Any(i => i.Positions.Contains(p)))
                            .ToList()
            ;

            if (TextItemsStore.Any(s => Equals(s.Value, replacement)))
            {
                TextItemsStore
                .SingleOrDefault(s => Equals(s.Value, replacement))
                .AddPositions(positions);
            }
            else
            {
                TextItemsStore.Add(new Word(replacement, positions, ItemTypes.Word));
            }

            foreach (var word in words)
            {
                word.DeletePositions(positions);
            }
        }
Esempio n. 2
0
 private int GetWordCount()
 {
     return(Enumerable.Range(FirstItemPosition, LastItemPosition - FirstItemPosition)
            .Select(p => TextItemsStore
                    .SingleOrDefault(i => i.Positions.Contains(p) && i.Type == ItemTypes.Word))
            .Where(i => i != null)
            .Count()
            );
 }
Esempio n. 3
0
        public IEnumerable <Word> GetWordsBy(int length)
        {
            return(Enumerable.Range(FirstItemPosition, LastItemPosition - FirstItemPosition)
                   .Select(p => TextItemsStore
                           .SingleOrDefault(i => i.Positions.Contains(p) && i.Type == ItemTypes.Word))
                   .Where(i => i != null)
                   .Cast <Word>()
                   .Where(w => w.Length.Equals(length))
                   .Distinct());

            ;
        }
        public void DeleteWordBy(int wordLength, bool isConsonantLetter)
        {
            var words = Enumerable.Range(0, Count)
                        .Select(p => TextItemsStore
                                .SingleOrDefault(i => i.Positions.Contains(p) && i.Type == ItemTypes.Word))
                        .Where(i => i != null)
                        .Cast <Word>()
                        .Where(w => w.Length.Equals(wordLength))
                        .Distinct();


            if (isConsonantLetter)
            {
                words = words.Where(w => Regex.IsMatch(w.Value, CONSONANT_LETTER, RegexOptions.IgnoreCase));
            }

            foreach (var item in words)
            {
                Console.WriteLine(item.Value);
            }

            var positions = words
                            .SelectMany(w => w.Positions)
                            .OrderBy(p => p)
                            .ToList()
            ;

            foreach (var word in words)
            {
                TextItemsStore = TextItemsStore
                                 .Where(i => !i.Equals(word)).ToList();
            }

            for (int i = 0, temp = 0; i < positions.Count; i++)
            {
                var previous = temp;
                var current  = positions[i];
                if (i != 0)
                {
                    for (int position = ++previous; position < current; position++)
                    {
                        TextItemsStore
                        .SingleOrDefault(i => i.Positions.Contains(position))
                        ?.DisplaceItems(position, i);
                    }
                }

                temp = current;
            }
            Sentences = GetSentences();

            Count = TextItemsStore.Select(i => i.Positions.Count()).Sum();
        }
        public void PrintToFile(string path)
        {
            var textResult = new StringBuilder();

            for (int position = 0; position < Count; position++)
            {
                var item = TextItemsStore.SingleOrDefault(i => i.Positions.Contains(position));

                textResult.Append(item?.Value);
            }

            File.WriteAllText(path, textResult.ToString());
        }
Esempio n. 6
0
        public void PrintToConsole()
        {
            var textResult = new StringBuilder();

            for (int position = FirstItemPosition; position <= LastItemPosition; position++)
            {
                var item = TextItemsStore.SingleOrDefault(i => i.Positions.Contains(position));

                if (item != null && item.Value.Equals(Environment.NewLine))
                {
                    item = new SpaceSeparator(new int[] { position }, ItemTypes.SpaceSeparator);
                }

                textResult.Append(item?.Value);
            }

            Console.WriteLine(textResult.ToString());
        }
        private SentenceTypes DefineSentenceType(int separatorPosition)
        {
            var separatorValue = TextItemsStore
                                 .SingleOrDefault(i => i.Positions.Contains(separatorPosition))
                                 .Value
            ;

            switch (separatorValue)
            {
            case "?!":
                return(SentenceTypes.InterrogativeExclamatory);

            case "?":
                return(SentenceTypes.Interrogative);

            case "!":
                return(SentenceTypes.Exlamatory);

            default:
                return(SentenceTypes.Declarative);
            }
        }
        private IEnumerable <ISentence> GetSentences()
        {
            var offset = 0;
            var count  = 1;

            var sentences = TextItemsStore
                            .OfType <Punctuation>()
                            .Where(p => p != null && p.IsSentenceSeparator == true)
                            .SelectMany(p => p.Positions)
                            .OrderBy(p => p)
                            .ToList()
                            .Select(p =>
            {
                var type = DefineSentenceType(p);
                var firstItemPosition = offset;
                var lastItemPosition  = p;
                offset = lastItemPosition + 2;
                return(new Sentence(TextItemsStore, firstItemPosition, lastItemPosition, count++, type));
            })
                            .ToList()
            ;

            return(sentences);
        }