В процессе работы над темой «Построитель вопросительных предложений» были рассмотрены алгоритмы построения вопросительных предложений и разбора исходного предложения на составные части.
При рассмотрении основных алгоритмов часть из них была реализована на языке Си. Это алгоритмы разбиение предложения на состовляющие его слова и генирация вопроса к слову.
В ходе наших исследований были рассмотренны различные электронные ресурсы, книги и научные работы, посвященные данной тематике.
Список литературы
1. Башмаков А.И., Башмаков И.А. Разработка компьютерных учебников и обучающих систем. М.: Филинъ, 2003
2. Семантическая нейронная сеть, как формальный язык описания и обработки смысла текстов на естественном языке [Электронный ресурс] http://www.shuklin.com/ai/ht/ru/ai00001f.aspx –Загл. С экрана. Яз. Рус.
3. Греков В.Ф., Крючков С.Е., Чешко Л.А Пособие для занятий по русскому языку. М.: Просвящение, 1990
4. Гладкий А.В. Формальные грамматики и языки. М.,: Наука, 1973.
5. Розенталь Д.Э. Управление в русском языке. Словарь-справочник. М.: Книга, 1986.
6. Апресян Ю.Д., Богуславский И.М., Иомдин Л.Л., Лазурский А.В., Перцов Н.В., Санников В.З., Цинман Л.Л. Лингвистическое обеспечение системы ЭТАП-2. М.: Наука, 1989
7. Розенталь Д.Э., Голуб И.Б., Теленкова М.А. Современный русский язык: Учебное пособие. М.: Международные отношения, 1994. 560 с.
8. Синтаксический разбор в системах статистического анализа текста [Электронный ресурс] http://www.metric.ru/publications.asp?ob_no=306 –Загл. С экрана. Яз. Рус.
9. Автоматическая генерация позитивных и негативных тестов для тестирования фазы синтаксического анализа [Электронный ресурс] http://citforum.univ.kiev.ua/SE/testing/generation/ –Загл. С экрана. Яз. Рус.
Приложение 1
Листинг программы разбиения предложения на отдельные слова и поиска вопросительных слов к ним
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
typedef struct{
char wrd[20];
char qwrd[40];
char params[6];
} word;
char res[20];
char *tmp;
int words(){
char *r;
memset(res,0,20);
r=res;
if(*tmp==0)return 0;
while(!(islower(*tmp)||isupper(*tmp)))tmp++;
if(islower(*tmp)||isupper(*tmp))
while(islower(*tmp)||isupper(*tmp))*r++=*tmp++;
tmp++;
return 1;
}
int getqword(word *wrd){
FILE *f;
int res=0;
word tmp;
f=fopen("qwrds.dat","r");
while(fread(&tmp,sizeof(word),1,f)>0){
if((wrd->params[0]&tmp.params[0])&& \
(wrd->params[1]&tmp.params[5])&& \
(wrd->params[2]&tmp.params[5])&& \
(wrd->params[3]&tmp.params[5])&& \
(wrd->params[4]&tmp.params[5])&& \
(wrd->params[5]&tmp.params[5])){
strcpy(wrd->qwrd,tmp.qwrd);
res=1;
break;
}
}
fclose(f);
return res;
}
int main(int argc, char *argv[])
{
char str[1000];
word *arr[100];
int i=0,j;
memset(str,0,1000);
printf("Input string:");
gets(str);
tmp=str;
while(words()!=0){
arr[i]=(word *)calloc(1,sizeof(word));
memset(arr[i]->wrd,0,20);
strcpy(arr[i]->wrd,res);
i++;
}
for(j=0;j<i;j++)
if(getqword(arr[i])==0)
printf(“Вопрос к слову не найден!!!\n”);
return 0;
}
Приложение 2
Список сокращений
КУ – компьютерный учебник
КОС – компьютерная обучающая система
УТЗ – учебно-тренировочная задача
ПО – предметная область
СНС – синтаксически неразложимое словосочетание
ПЕ – предикативная единица