Курсовая работа: Построитель вопросительных предложений
char params[6]; // параметры слова
}.
Если же какой-то параметр не учитывается или у данного слова его нет, то в масиве params он обозначается как число 255 (или FF в шестнадцатиричной системе). Остальные значения могуь лежать в интервале от 0 до 254.
2.2 Построение дерева синтаксического подчинения
Один из самых трудоемких этапов в разборе предложений это построение дерева подчинения. Данная задача не входит в рамки нашего исследования, т. к. является проблемой из области прикладной лингвистики.
Однако хотелось бы сказать, что на данный момент нам известен один способ решения: с помощью семантической нейронной сети[2].
2.3 Генерация вопросов
По сути, формулировка вопроса к какому-то члену предложения строится на онове исходного предложения путем удаления из него данного члена и подчененных ему синтаксических единиц, добавления вопросительного слова или словосочетания, а также изменения порядка оставшихся членов.
Отметим, что не все предложения подходят для генерации вопросов. К потенциально применимым относятся предложения, являющиеся повествовательными, синтаксически членимыми и полными в плане граматической структуры. Предпочтение при выборе стоит отдавать простым двусоставным предложениям с прямым порядком слов. Осложненные и сложные предложения также могут использоваться, однако сложность их синтаксической структуры необходимо ограничить.
2.3.1 Задание вопроса к слову
На наш взгляд, самым простым способом задания вопроса к слову будет выбор подходящего вопросительного слова из заранее подготовленной таблицы по некоторым критериям. Такой подход можно наблюдать в базах данных, когда по некоторым исходным параметрам выбираются подходящие результаты. Например:
Пусть задана таблица с вопросительными словами или словосочетаниями QTABLE.
Для того, что бы задать вопрос к слову «раму», надо сделать следующий запрос:
SELECT * FROM QTABLE WHERE params=wparams,
где wparams – список атрибутов слова, к которому задается вопрос (в этом примере это «сущ.,ед.,нар.,неод.»).
Результатом работы данного запроса будет вопросительное слово «что».
В нашей работе за этот этап отвечает функция getqword(). Алгоритм ее работы заключается в следующем:
Пусть у нас есть файл, в котором хранятся структуры word, в которых заданы только параметры и вопросительные слова. Функция принимает в качестве параметра структуру word. По заданным параметрам из базы данных (в нашем случае это файл qwrds.dat) выбирается вопросительное слово или словосочетание и записывается в соответствующее поле во входной структуре. Если же вопросительное слово не найдено, то функция возвращает 0.
Код функции getqword():
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); // Запись результата во входную структуру