Ejemplo n.º 1
0
        private void button2_Click(object sender, EventArgs e)
        {
            Stopwatch extime  = new Stopwatch();
            string    new_str = "\0";
            Random    rnd     = new Random();

            button2.BackColor = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
            button2.ForeColor = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
            if (radioButton1.Checked == true)
            {
                extime.Start();
                for (int i = 0; i < word_list.Count; i++)
                {
                    if (word_list[i].Contains(textBox3.Text) && !listBox1.Items.Contains(word_list[i]))
                    {
                        new_str = word_list[i];
                        break;
                    }
                    else
                    {
                        new_str = "\0";
                    }
                }
            }
            else if (radioButton2.Checked == true)
            {
                extime.Start();
                int max_dist;
                if ((int.TryParse(textBox5.Text, out max_dist)))
                {
                    for (int i = 0; i < word_list.Count; i++)
                    {
                        if (LevDistance.VagnerCalculation(word_list[i], textBox3.Text) <= max_dist &&
                            !listBox1.Items.Contains(word_list[i]))
                        {
                            new_str = word_list[i];
                            break;
                        }
                        else
                        {
                            new_str = "\0";
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Пожалуйста, выберите метод поиска слова!");
            }
            if (new_str[0] != '\0')
            {
                listBox1.BeginUpdate();
                listBox1.Items.Add(new_str);
                listBox1.EndUpdate();
            }
            extime.Stop();
            textBox4.Text = extime.ElapsedMilliseconds.ToString();
        }
        protected string ClosestMatch(string target, List <string> options)
        {
            int    lowest      = LevDistance.Compute(target, options[0]);
            string selectedVal = string.Empty;

            foreach (string option in options)
            {
                int currentDist = LevDistance.Compute(target, option);
                if (currentDist < lowest)
                {
                    lowest      = currentDist;
                    selectedVal = option;
                }
            }
            return(selectedVal);
        }
Ejemplo n.º 3
0
        public static List <ParallelSearchResult> ArrayThreadTask(object t_param)
        {
            ParallelSearchThreadParam param = t_param as ParallelSearchThreadParam;
            string word_temp = param.wordTemp.Trim();
            List <ParallelSearchResult> result_list = new List <ParallelSearchResult>();

            foreach (string str in param.searchList)
            {
                int dist = LevDistance.VagnerCalculation(str.ToUpper(), word_temp.ToUpper());
                if (dist <= param.maxDist)
                {
                    ParallelSearchResult temp_list = new ParallelSearchResult()
                    {
                        word      = str,
                        dist      = dist,
                        threadNum = param.threadNum
                    };
                    result_list.Add(temp_list);
                }
            }
            return(result_list);
        }
Ejemplo n.º 4
0
        private void searchButton_Click(object sender, EventArgs e)
        {
            string searchingWord = this.searchWord.Text.Trim(); //получаем текст

            if (WordList.Count > 0 && !string.IsNullOrWhiteSpace(searchingWord))
            {
                if (this.checkBoxLevDist.Checked == true) // Если стоит галочка (Задание ЛР5)
                {
                    string    originStr = this.searchWord.Text.Trim();
                    int       maxDist = int.Parse(this.textBox4.Text.Trim());
                    int       digit = 1000; // условно 1000 (не может же быть слова из 1000 букв :) )
                    int       i = 0, j = 0;
                    Stopwatch time = new Stopwatch();
                    time.Start();

                    foreach (string str in WordList)
                    {
                        int digitTemp = LevDistance.Distance(originStr, str);
                        if (digitTemp < digit)
                        {
                            digit = digitTemp;
                            i     = j; //запонимаем индекс слова в списке, имеющего на данный момент наименьшее расстоятние Л.
                        }
                        j++;
                    }

                    time.Stop();
                    this.textBoxExactTime.Text = time.Elapsed.ToString();

                    this.listBoxResult.BeginUpdate();

                    this.listBoxResult.Items.Clear();


                    if (digit == -1)
                    {
                        this.listBoxResult.Items.Add("Пустые строки... Введите слово (текст)");
                    }
                    else if (maxDist != 0) // Если пользователь ввел интересующее его расстояние Левенштейна
                    {
                        if (digit <= maxDist)
                        {
                            this.listBoxResult.Items.Add("Найденое слово: " + WordList[i]);
                            this.listBoxResult.Items.Add("Слова можно считать совпадающими");
                            this.listBoxResult.Items.Add("Расстояние Левенштейна: " + digit + " <= " + maxDist);
                        }
                        if (digit > maxDist)
                        {
                            this.listBoxResult.Items.Add("Слово '" + originStr + "' в тексте не найдено");
                            this.listBoxResult.Items.Add("Не одно слово из текста не совпало с искомым");
                            this.listBoxResult.Items.Add("Расстояние Левенштейна: " + digit + " > " + maxDist);
                        }
                    }
                    else // если растояние Левенштейна пользователем не указано ( находим слово с наименьшим расстоянием Левенштейна )
                    {
                        this.listBoxResult.Items.Add("Найденое слово: " + WordList[i]);
                        this.listBoxResult.Items.Add("Расстояние Левенштейна: " + digit);
                    }

                    this.listBoxResult.EndUpdate();
                }
                else // если галочка не стоит (Задание ЛР4)
                {
                    // для поиска в верхнем регистре
                    string wordUpper = searchingWord.ToUpper();

                    // временные результаты поиска
                    List <string> tempList = new List <string>();

                    Stopwatch time = new Stopwatch();
                    time.Start();
                    foreach (string str in WordList)
                    {
                        if (str.ToUpper().Contains(wordUpper))
                        {
                            tempList.Add(str);
                        }
                    }

                    time.Stop();
                    this.textBoxExactTime.Text = time.Elapsed.ToString();

                    this.listBoxResult.BeginUpdate();

                    // отчистка listBox
                    this.listBoxResult.Items.Clear();

                    // вывод найденного слова
                    foreach (string str in tempList)
                    {
                        string massege = "Найденное слово: ";
                        this.listBoxResult.Items.Add(massege + str);
                    }
                    this.listBoxResult.EndUpdate();

                    if (tempList.Count == 0)
                    {
                        string massege = ":/ искомого слова в тексте нет :/";
                        this.listBoxResult.Items.Add(massege);
                    }
                }
            }
            else
            {
                MessageBox.Show("Необходимо выбрать файл и ввести слово для поиска");
            }
        }