Loading...
cap7ainjack avatar cap7ainjack 20 Точки

Homework: Streams and Files - Problem 3. Word Count

Здравейте!

Дали може малко помощ за тази задача. В момента съм написал код който търси по предварително зададена дума и ред т.е. не търси автоматично всичките думи и т.н.

http://pastebin.com/kumjcTC4

Молбата ми е, може някой да help-не да направя регекс  с който да разкарам всичките символи които не са думи от всеки ред на текста.

Второто да се направят циклите да върти през всички думи и редове на текста. Предполагам, че това ще се оправи като се оправи регекс защото сега ако сложа While цикъл вътре в using-a не мога да направя нищо след него, мисля че заради Replace-a в стринг currentSentence. Както и да е, направих го така само за да подкарам логиката.

Оценявам всяка помощ! Благодаря!

Тагове:
0
Fundamentals Module
Lamms avatar Lamms 197 Точки

Здравей, използвай този цикъл

while (word != null)
                        {
                            var pattern = string.Format(@"\b{0}\b",word);
                            var match = Regex.Matches(text, pattern);
                            result.Add(word, match.Count);
                            word = file.ReadLine();
                        }

 

 

0
cap7ainjack avatar cap7ainjack 20 Точки

Да, видях го този вариант, ще се опитам да го разбера и него.

Иначе успях да го подкарам така ей сега:

http://pastebin.com/Dg0wFTt1

Предполагам има доста по-хитри начини, но това измислих само.

0
04/10/2015 23:53:03
KamenYurukov avatar KamenYurukov 2 Точки

Чак по-умен не е, но това скалъпих от поглеждане тук и там:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace _3.WordCount
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, int> wordAndFrequency = new Dictionary<string, int>();
            string[] words = File.ReadAllText("../../../words.txt").Split();

            using (StreamReader reader = new StreamReader("../../../input.txt"))
            {
                string currentLine = reader.ReadLine();
                
                while (currentLine != null)
                {
                    string[] wordsInCurrentLine = currentLine.ToLower()
                    .Split(new[] { ' ', '.', ',', '-', '?', '!', ':', ';' }, StringSplitOptions.RemoveEmptyEntries);

                    foreach (var word in words)
                    {
                        foreach (var item in wordsInCurrentLine)
                        {
                            if (word == item)
                            {
                                if (wordAndFrequency.ContainsKey(item) == false)
                                {
                                    wordAndFrequency.Add(item, 0);
                                }
                                wordAndFrequency[item]++;
                            }
                        }
                    }
                    currentLine = reader.ReadLine();
                }
            }
            using (StreamWriter writer = new StreamWriter("../../../output.txt"))
            {
                foreach (var item in wordAndFrequency.OrderByDescending(x => x.Value))
                {
                    writer.WriteLine($"{item.Key} - {item.Value}");
                }
            }            
        }
    }
}

0
yanchev.ilian avatar yanchev.ilian 24 Точки

Привет,

Решението ти е добро, но не фукнционира правилно, поради следното:

https://ibb.co/jVyHRTF

тук ти беше казал: string[] words = inputWords.Split(new string[] {Environment.NewLine}, StringSplitOptions.None);

което не подрежда елементите в масив, а ги прави на един ред, следователно не може да се обходят всичките елементи на inputWords, за да бъдат сравнени с currentSentence от StreamReader- а.

 

Поздрави,

Илиян Янчев

0
Mariyan_Tsonev avatar Mariyan_Tsonev 1 Точки

Това решение няма да работи, ако на един ред една и съща дума се съдържа повече от 1 път. Освен това ще хване и части от дума. Например в първия ред ще хване is в думата his. 

0
04/10/2020 21:03:23
satela avatar satela 1 Точки

Това е моето решение.

https://pastebin.com/sfLB1WZD

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.