![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Akiko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Здравствуйте.
Заранее прошу прощения, если подобной просьбой нарушаю правила форума или пишу не в ту тему, потому как, если в общем, она будет звучать где-то как «напишите мне, пожалуйста, кусок программы». Проблема в том, что мне на диплом нужно написать программу для автоматического анализа и синтеза определенной формы глагола. С теоретической разработкой все нормально, а вот код программы написать категорически не умею... ![]() Программа должна в тексте, вставленном в Textbox, находить слова, которые находятся в базе данных. Потом эти выделенные слова проверять на определенное окружение, и, уже в зависимости от него, выдавать результат. Если я правильно понимаю, сначала нужно удалить из текста знаки препинания и сделать каждое слово отдельной строкой (разбить текст на массив строк). Затем уже каждую строку сравнивать со строками в базе данных. В результате программа должна выделить как-то совпавшие слова. Но это должен быть только промежуточный этап... Затем нужно, чтобы проверялось окружение выделенных слов. Что-то вроде: если первое слово перед найденным находится в базе данных А, то в результате оно выделяется (скажем, цветом), а если первое слово перед найденным находится в базе С, то найденное слово не выделяется. Получается, что каждый раз, когда очередное слово в тексте совпадает со списком из базы, проверяется его окружение. Тут я вообще теряюсь... как делать эту проверку? В результате должно получаться что-то вроде: I sat on the bank listening to the running of the water and the rustling of the leaves. Выделяются только running и rustling, потому что из форм глагола с инговым окончанием нужно выбрать только те, которые выступают в роли Verbal Noun. Пошаговое описание всего этого процесса примерно такое: 1) В Texbox водится текст; 2) Текст проверяется посимвольно, если символы - , . ? ! « “ : ; ... % - они удаляются; (в принципе могут встретиться и другие символы какие-то, но в художественном тексте это маловероятно) 3) Снова с начала текста программа идет до первого пробела, затем вырезает часть текста до пробела и делает эту часть отдельной строкой. 4) Таким образом, весь текст разделяется на массив строк. Вот тут возник вопрос. Возможно, стоит сразу делать базу данных, в которой каждое слово будет в отдельной строке и иметь свой номер? Мы в университете похожее делали таким образом:
Не уверена только, что в данном случае оно подойдет. 5) Берем строку из массива и сравниваем с записями базы данных 1; (как в данном случае должно иди сравнение, я, к своему стыду, даже не представляю) 6) Проверяем, совпадает ли слово (строка) с каким-то из базы; 7) Если да, переходим к шагу 8, если нет – 18; 8) Берем следующий после выделенного элемент в массиве (скажем, выделенный элемент – k, берем k+1); Может быть, тут и будет удобнее, если массив слов будет в базе данных с пронумерованными пунктами. 9) Проверяем, есть ли этот элемент в базе данных 2; 10) Если есть, выделяем слово k, если нет, переходим к шагу 11; 11) Берем элемент, предшествующий выделенному слову (k-1); 12) Проверяем, есть ли это элемент в базе данных 3; (Идет проверка по разным бд, потому что выделенное слово – это глагол в определенной форме, в данном случае – в форме Past Participle. Список глаголов в этой форме в первой базе данных, таким образом идет их поиск в тексте. Но глаголы в такой же форме функционируют и как, скажем, Past Indefinite, когда это регулярные глаголы. Поэтому дальше проверяем их окружение. По окружению можно определить, функционирует ли в данном контексту глагол как Past Participle или нет) 13) Если нет, пропускаем это слово и переходим к шагу 18; 14) Если есть, то выделяем 5 элементов перед выделенным словом (с k-6 до k-1); 15) Проверяем, совпадает ли какой-то из выделенных элементов со словом has/have/had; (Тут я не знаю, можно ли вообще так делать – сравнивать с конкретным словом. И можно ли сравнивать в одном шаге со всеми тремя? Или лучше сделать для этого отдельные шаги? Или просто сделать маленькую базу данных, и сравнивать с ней поочередно k-2, k-3 и т. д.); 16) Если совпадает, то пропускаем слово и переходим к шагу 18; 17) Если нет, то выделяем слово, и переходим к шагу 18; 18) Проверяем, не последняя ли строка (фактически, есть ли что еще проверять); 19) Если нет, переходим к шагу 5 (сравниваем следующую строку); 20) Если да, выводим результат (Можно, чтобы просто в Textbox появлялось выделение слов?) Помогите, пожалуйста, написать код! ![]() Это сообщение отредактировал(а) Akiko - 12.6.2007, 17:08 |
|||
|
||||
Stepan_Lameroff |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 16.12.2006 Репутация: нет Всего: 14 |
Посмотрите WordNet - CPP
или WordNet.Net - CSHARP Также можно попытаться задать этот вопрос на этом форуме (CPP). Разработчика зовут Илья Козиев - очень приятный и отзывчивый человек. Я думаю, может помочь. |
|||
|
||||
Akiko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Спасибо
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |