Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 20:59   #1
КастиЭль
Новичок
Джуниор
 
Регистрация: 08.11.2013
Сообщений: 2
По умолчанию Словарь С#

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

Подскажите с чего начать, как это можно сделать?
Я вот думаю, если использовать Dictionary и в значении массив создать?
Возможно ли это?
Кто может помочь
КастиЭль вне форума Ответить с цитированием
Старый 09.11.2013, 11:30   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,305
По умолчанию

Как бы делал я (не смейтесь пжлст):

• Придумал бы алгоритм выделения корня из введенного слова (например, отсекал бы слева все приставки русского языка, справа суффиксы и окончания. Как - это другой вопрос).
• Далее создаю регулярное выражение на основе корня
• Выполняю поиск всех слов в словаре, которые содержат заданный корень.

Вообще, при желании, можно обойтись и без регулярный выражений.

Другой способ, что приходит мне в голову:
Создать базу данных "словарь". При занесении слова в БД разбирать его по составу, и хранить слово в виде полей "приставка" - "корень" - "суффиксы" - "окончание". В базе все приставки и суффиксы хранить в отдельных таблицах и просто извлекать номера.

Проблемы при таком раскладе:
• Как обрабатывать сложные слова, в которых несколько корней?
• Сложно правильно определять суффиксы. Например, в слове "клубника" возникнет неоднозначность с суффиксами "ник" и "ик".

Это то, что мне пришло в голову при первом прочтении. Я думаю, если посидеть и почитать правила русского языка (раздел словообразования в грамматике), то можно придумать и более элегантные решения.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 09.11.2013, 13:45   #3
КастиЭль
Новичок
Джуниор
 
Регистрация: 08.11.2013
Сообщений: 2
По умолчанию

Все проще,я сразу ввожу слово по морфемам(т.е. написал приставку нажал интер, и т.д. Если ничего не написал, значит нету морфемы).

Я не могу разобраться в синтаксисе, как мне это сделать://
Желательно сделать на блоках UI & Logic
КастиЭль вне форума Ответить с цитированием
Старый 11.11.2013, 07:50   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Как Вы отличаете что должно быть по порядку?
Бывает ведь по 2 приставки, тогда корень идёт третьим.
А у Вас, возможно, запоминается, что корень второй по порядку.
Я бы сделал примерно так:
Создал бы структуру или класс в котором хранятся части слов (строки ессно) и перечисление для морфемы(приставка , корень, суффикс, окончание). Также класс слова, представляющий из себя список из таких частей и методы по его наполнению.
Реализовать простейшую проверку на однокоренные слова можно обычным перебором - везде где строка одинаковая и морфема - корень - значит совпадение.
Случаи блуждающих гласных в корне и прочие хитрости великого и могучего можно либо опустить, либо оставить на потом, когда уже простейшая модель будет реализована (там надо будет создавать словарь какие строки -корни могут трансформироваться в какие другие и по ним ещё шерстить).
Как сделать уи - думаю даже проще.
На форме ввода слова динамически создаётся текстбокс и 2 кнопки - приставка и корень.
Вводим текст и нажимаем одну из кнопок, (на все кнопки привешана проверка текстбокса на пустоту, и вызов метода нашего класса слова - добавить часть речи - с текстом и типом морфемы в параметрах). Если нажата кнопка, то следующий этап - генерим опять текстбокс и кнопки (предыдущие дизейблим, и невыбранную кнопку можно даже убрать, т.о. будет индикация какие строки и морфемы уже введены). Эти была нажата приставка, то 2 кнопки будут опять приставка и корень, если же корень, то надо генерить 3 кнопки - суффикс, окончание, конец слова. И так далее пока не будет нажат конец слова (для него надо будет выкинуть проверку на пустоту текстбокса), в которой вызовем метод класса завершить слово.
Эти переходы для генерёжки я могу предложить оформить в виде конечного автомата (мол на первом шаге сгенерить такие-то кнопки, в зависимости от выбора переходим на второй или опять первый шаг(случай для приставки), и для каждого шага будут свои кнопки, и каждая кнопка соответственно прыгает на какой-то шаг). Также есть альтернатива кнопке "конец слова" - генерить 2 варианта кнопки с концевой морфемой каждый раз - одна из которых завершает слова, а другая идёт на новую итерацию (например в самом начале 3 кнопки приставка корень и корень(стоп) - последняя для ввода чего-то типа "слон")
Наверное, при этом ещё будет возврат на главную форму где есть общий список введённых слов. Ну и наверное как-то реализовать интерфейсно выбор пары слов и кнопочку для сравнения, например, 2 кнопочки которые текущее выбранное из списка-листбокса слово "кидают" в один из 2 текстбоксов (задизейбленых для ввода), и при наличии слов в обоих можно автоматом вызывать проверку однокоренных, с отображением результата хоть в лейбл.

Если что, могу написать такую программу на винформс, но мне надо будет возместить время.

Последний раз редактировалось phomm; 11.11.2013 в 07:52.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
словарь ssdo Паскаль, Turbo Pascal, PascalABC.NET 0 29.11.2011 14:57
словарь t9 Yippee-ki-yay Помощь студентам 1 08.11.2011 00:13
Словарь Ципихович Эндрю Microsoft Office Word 2 22.02.2011 21:02
Словарь Alex_sim Общие вопросы .NET 4 04.06.2010 17:34
Словарь Rebel123 Софт 4 03.07.2009 09:19