Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Структуры хранения данных и знаний.

Читайте также:
  1. Host BusПредназначена для скоростной передачи данных (64 разряда) и сигналов управления между процессором и остальными компонентами системы.
  2. III. Органы и структуры эмбриона
  3. III. Учреждения здравоохранения по надзору в сфере защиты прав потребителей
  4. PIMS: от данных к официальным заявлениям
  5. VI. Закрепление знаний.
  6. Авторское право - правовое положение авторов и созданных их творческим трудом произведений литературы, науки и искусства.
  7. Адаптивные структуры управления

Одной из важнейших структур, с помощью которых представляются и хранятся в оперативной памяти компьютера анализируемые в лингвистическом процессоре данные, является дерево. Дерево – это структура данных, представляющая из себя граф, у которого одна из вершин определена как корневая.

На языке C дерево может быть представлено в виде следующих структур

struct Node // Структура для описания вершины
{
char* name; // Имя вершины (или др. информация)
……………….
Arc* parent; // Указатель на дугу, идущую от родительской вершины
Arc** children; // Указатель на массив исходящих дуг
int nNumOfChildren; // Число исходящих дуг
}

struct Arc // Структура для хранения дуги
{
char* name; // Имя дуги (или др.информация)
………………..
Node* Prev; // Указатель на вершину-родитель
Node* Next; // Указатель на дочернюю вершину
}

struct Tree // Структура для описания дерева
{
Node* root; // Указатель на корневую вершину дерева
}

Очень удобной для хранения и зачастую удобной для обработки формой хранения дерева является линейная скобочная запись или, что то же самое, запись дерева в виде фреймов (от английского frame – рамка). Линейная скобочная запись строится на основе того или иного обхода вершин дерева. Рекурсивная процедура обхода нашего дерева может иметь вид:

void tree_order (Node* nd)
{
for (int i=0; i
{
Node* cur_node =nd->children[i];
tree_order(cur_node);
}
}

Рассмотрим скобочную линейную структуру для следующего дерева:

Линейная скобочная структура должна иметь вид:

R0(A)(R1(B)(R4(E)R5(F))R2(C)R3(D)(R6(G)))

Таким образом, алгоритм будет таким:


// Строка для результирующей линейной скобочной структуры, размер 10000
// взят для примера.

char* out_str=(char*)malloc(10000*sizeof(char));
strcpy(out_str,””);

// вызов процедуры
// Tree tr1; - входящее дерево

tree_order(out_str, tr1.root);


// сама процедура:
void tree_order (char* str1, Node* nd)
{
strcat(nd->parent.name);
strcat(str1,”(“);
strcat(nd.name);
strcat(str1,”)“);
if(nNumOfChildren>0)
strcat(str1,”(“);

for (int i=0; i
{
Node* cur_node =nd->children[i];

tree_order(str1, cur_node);
}

if(nNumOfChildren>0)
strcat(str1,”)“);


}


Дата добавления: 2015-07-15; просмотров: 80 | Нарушение авторских прав


Читайте в этой же книге: Семантический анализ. | Основные модели лингвистических систем. | Стратегия разбора и синтеза текстов в зависимости от типа языка. | Морфологический (лексико-грамматический) анализ. | Синтаксический анализ. | Модели, основанные на Link Grammar. | Модели, использующие структуры уровня именных и глагольных групп. | Лингвистический процессор Ю.Д. Апресяна, И.М. Богуславского и Л.Л. Иомдина. | Предикаты моделей управления; | Служебные |
<== предыдущая страница | следующая страница ==>
Реализация семантического анализа в системе ДИАЛИНГ| Общие понятия.

mybiblioteka.su - 2015-2024 год. (0.005 сек.)