Професионална програма
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