|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.11.2013, 20:59 | #1 |
Новичок
Джуниор
Регистрация: 08.11.2013
Сообщений: 2
|
Словарь С#
Здравствуйте,
Просьба, нужно создать словарь слов, который определяет является ли слово однокоренным. Если является то вывести все слова схожие с ним по корню. Слово вводится сразу деленное на морфемы(корень суффикс приставка и тд.) Подскажите с чего начать, как это можно сделать? Я вот думаю, если использовать Dictionary и в значении массив создать? Возможно ли это? Кто может помочь |
09.11.2013, 11:30 | #2 |
В стагнации
Участник клуба
Регистрация: 29.07.2011
Сообщений: 1,305
|
Как бы делал я (не смейтесь пжлст):
• Придумал бы алгоритм выделения корня из введенного слова (например, отсекал бы слева все приставки русского языка, справа суффиксы и окончания. Как - это другой вопрос). • Далее создаю регулярное выражение на основе корня • Выполняю поиск всех слов в словаре, которые содержат заданный корень. Вообще, при желании, можно обойтись и без регулярный выражений. Другой способ, что приходит мне в голову: Создать базу данных "словарь". При занесении слова в БД разбирать его по составу, и хранить слово в виде полей "приставка" - "корень" - "суффиксы" - "окончание". В базе все приставки и суффиксы хранить в отдельных таблицах и просто извлекать номера. Проблемы при таком раскладе: • Как обрабатывать сложные слова, в которых несколько корней? • Сложно правильно определять суффиксы. Например, в слове "клубника" возникнет неоднозначность с суффиксами "ник" и "ик". Это то, что мне пришло в голову при первом прочтении. Я думаю, если посидеть и почитать правила русского языка (раздел словообразования в грамматике), то можно придумать и более элегантные решения.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание. |
09.11.2013, 13:45 | #3 |
Новичок
Джуниор
Регистрация: 08.11.2013
Сообщений: 2
|
Все проще,я сразу ввожу слово по морфемам(т.е. написал приставку нажал интер, и т.д. Если ничего не написал, значит нету морфемы).
Я не могу разобраться в синтаксисе, как мне это сделать:// Желательно сделать на блоках UI & Logic |
11.11.2013, 07:50 | #4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,876
|
Как Вы отличаете что должно быть по порядку?
Бывает ведь по 2 приставки, тогда корень идёт третьим. А у Вас, возможно, запоминается, что корень второй по порядку. Я бы сделал примерно так: Создал бы структуру или класс в котором хранятся части слов (строки ессно) и перечисление для морфемы(приставка , корень, суффикс, окончание). Также класс слова, представляющий из себя список из таких частей и методы по его наполнению. Реализовать простейшую проверку на однокоренные слова можно обычным перебором - везде где строка одинаковая и морфема - корень - значит совпадение. Случаи блуждающих гласных в корне и прочие хитрости великого и могучего можно либо опустить, либо оставить на потом, когда уже простейшая модель будет реализована (там надо будет создавать словарь какие строки -корни могут трансформироваться в какие другие и по ним ещё шерстить). Как сделать уи - думаю даже проще. На форме ввода слова динамически создаётся текстбокс и 2 кнопки - приставка и корень. Вводим текст и нажимаем одну из кнопок, (на все кнопки привешана проверка текстбокса на пустоту, и вызов метода нашего класса слова - добавить часть речи - с текстом и типом морфемы в параметрах). Если нажата кнопка, то следующий этап - генерим опять текстбокс и кнопки (предыдущие дизейблим, и невыбранную кнопку можно даже убрать, т.о. будет индикация какие строки и морфемы уже введены). Эти была нажата приставка, то 2 кнопки будут опять приставка и корень, если же корень, то надо генерить 3 кнопки - суффикс, окончание, конец слова. И так далее пока не будет нажат конец слова (для него надо будет выкинуть проверку на пустоту текстбокса), в которой вызовем метод класса завершить слово. Эти переходы для генерёжки я могу предложить оформить в виде конечного автомата (мол на первом шаге сгенерить такие-то кнопки, в зависимости от выбора переходим на второй или опять первый шаг(случай для приставки), и для каждого шага будут свои кнопки, и каждая кнопка соответственно прыгает на какой-то шаг). Также есть альтернатива кнопке "конец слова" - генерить 2 варианта кнопки с концевой морфемой каждый раз - одна из которых завершает слова, а другая идёт на новую итерацию (например в самом начале 3 кнопки приставка корень и корень(стоп) - последняя для ввода чего-то типа "слон") Наверное, при этом ещё будет возврат на главную форму где есть общий список введённых слов. Ну и наверное как-то реализовать интерфейсно выбор пары слов и кнопочку для сравнения, например, 2 кнопочки которые текущее выбранное из списка-листбокса слово "кидают" в один из 2 текстбоксов (задизейбленых для ввода), и при наличии слов в обоих можно автоматом вызывать проверку однокоренных, с отображением результата хоть в лейбл. Если что, могу написать такую программу на винформс, но мне надо будет возместить время. Последний раз редактировалось phomm; 11.11.2013 в 07:52. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
словарь | 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 |