Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39

Поиск слова с одиночной ошибкой

22.11.2018, 14:41. Показов 2158. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Помогите решить проблему. Необходимо на C# создать приложение-словарь для получения перевода с английского на русский и наоборот. Число слов в словаре порядка 50 (с этим я сам разобрался), с возможностью распознавания слов с одиночными ошибками.
Изначально делал через коллекцию Dictionary, на отъе****сь, но здесь получается хардкод, да и 50 слов с их переводом в коде приложения так себе удовольствие. Переделал с внешней базой на MySql, вечером буду причёсывать код окончательно. А вот как реализовать распознавание слова с ошибкой я ума не приложу. И про регулярки почитал, и про сравнение строк, никаких мыслей в голове. Да и как запихнуть регулярку или сравнение строк через запрос к БД тоже не понятно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2018, 14:41
Ответы с готовыми решениями:

Поиск файлов в системных директориях завершается с ошибкой доступа
Здравствуйте. Есть некоторая задача: просканировать некоторую область на диске и затем выполнить некоторые действия с файлами, найденными в...

задача на поиск слова с ошибкой
Задача: Даны заданное слово и непустая последовательность слов (одномерный символьный массив): между словами запятые или пробелы, в конце...

Преобразовать строку, удалив пробелы, и разделить слова одиночной "звёздочкой"
Дана строка слов, разделенных пробелами. Между словами может быть несколько пробелов, в начале и конце строки также могут быть пробелы....

3
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
22.11.2018, 15:02
Лучший ответ Сообщение было отмечено Eugene_BY как решение

Решение

Нечеткий поиск в помощь.
1
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
22.11.2018, 19:16  [ТС]
Нечеткий поиск в помощь.
Спасибо, попробую разобраться.
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
26.11.2018, 10:13  [ТС]
Задача решена, может кому ещё пригодится. Словарь во внешней базе на MySql, dictionary, таблица words со столбцами russian и english. Использован алгоритм Левенштейна, рассчитывается дистанция Левенштейна, с условием, что дистанция меньше или равна единице. Класс с алгоритмом:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
static class LevenshteinDistance
    {
        
        public static int Compute(string s, string t)
        {
            int n = s.Length;
            int m = t.Length;
            int[,] d = new int[n + 1, m + 1];
 
            if (n == 0)
            {
                return m;
            }
 
            if (m == 0)
            {
                return n;
            }
 
            for (int i = 0; i <= n; d[i, 0] = i++)
            {
            }
 
            for (int j = 0; j <= m; d[0, j] = j++)
            {
            }
 
            for (int i = 1; i <= n; i++)
            {
                for (int j = 1; j <= m; j++)
                {
                    int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;
 
                    d[i, j] = Math.Min(
                        Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
                        d[i - 1, j - 1] + cost);
                }
            }
            return d[n, m];
        }
    }

Обработчик событий на кнопке "Перевод":
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
private void BTN_TRANSLATE_Click(object sender, EventArgs e)
        {
            MySqlConnection myConnection = new MySqlConnection("datasource=localhost;port=3306;database=dictionary;username=;password=;");
            MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM dictionary.words", myConnection);
            MySqlCommand command;
            MySqlDataReader mdr;
 
            if (radioButton1.Checked)
            {
                
 
                try
                {
                    myConnection.Open();
 
                    DataSet ds = new DataSet();
                    adapter.Fill(ds, "word");
 
                    string engWord = textBox1.Text;
 
                    string[] enword = new string[ds.Tables[0].Rows.Count];
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        enword[i] = ds.Tables[0].Rows[i]["english"].ToString();
                    }
 
                    for (int i = 0; i < enword.Length; i++)
                    {
                        int cost = LevenshteinDistance.Compute(textBox1.Text, enword[i]);
                        if (cost <= 1)
                        {
                            engWord = enword[i];
                            break;
                        }
                    }
 
                    string selectQuery = "SELECT * FROM words WHERE english='" + engWord + "'";
                    command = new MySqlCommand(selectQuery, myConnection);
 
                    mdr = command.ExecuteReader();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString()); return;
                }
 
                if (mdr.Read())
                {
                    textBox2.Text = mdr.GetString("russian");
                }
                else
                {
                    MessageBox.Show("No data found!");
                }
            }
 
            else if (radioButton2.Checked)
            {
 
 
                try
                {
                    myConnection.Open();
 
                    DataSet ds = new DataSet();
                    adapter.Fill(ds, "word");
 
                    string rusWord = textBox1.Text;
 
                    string[] ruword = new string[ds.Tables[0].Rows.Count];
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        ruword[i] = ds.Tables[0].Rows[i]["russian"].ToString();
                    }
 
                    for (int i = 0; i < ruword.Length; i++)
                    {
                        int cost = LevenshteinDistance.Compute(textBox1.Text, ruword[i]);
                        if (cost <= 1)
                        {
                            rusWord = ruword[i];
                            break;
                        }
                    }
 
                    string selectQuery = "SELECT * FROM words WHERE russian='" + rusWord + "'";
                    command = new MySqlCommand(selectQuery, myConnection);
 
                    mdr = command.ExecuteReader();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString()); return;
                }
 
                if (mdr.Read())
                {
                    textBox2.Text = mdr.GetString("english");
                }
                else
                {
                    MessageBox.Show("No data found!");
                }
 
            }
 
            else
            {
                MessageBox.Show("Направление не выбрано");
            }
 
            myConnection.Close();
 
        }

Возможно код получился несколько громоздким, но думаю и так сойдёт. Приложение работает, препод пока не ответил на письмо с работой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2018, 10:13
Помогаю со студенческими работами здесь

Сравнить два слова, одно из которых с ошибкой
Задача на приведение типов вроде как. В общем дано два слова. &quot;Хороший&quot; и &quot;хароший&quot; , нужно их сравнить и вывести true? Сказать что...

Модифицированный бинарный поиск: программа завершается с ошибкой
Доброго времени суток. Чутка модифицировал функцию бинарного поиска и теперь программа завершается с ошибкой, причем в режиме отладчика...

Реализовать поиск по товару с возможной ошибкой ввода значения
Здравствуйте, подскажите пожалуйста нужно реализовать поиск по товару с возможной ошибкой ввода значения те. пользователь забил...

Поиск нужного слова в словаре, в котором слова расположены в лексикографическом порядке
Напишите задачу поиска нужного слова в словаре, в котором слова расположены в лексикографическом порядке(бинарный поиск). решить надо...

Как осуществить в строковом массиве поиск именно слова, а не части слова?
как осуществить в строковом массиве поиск именно слова(!), а не части слова. Допустим, есть строка: &quot;this is horosho&quot; Если я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru