Повна версія

Головна arrow Інформатика arrow ІНТЕЛЕКТУАЛЬНІ СИСТЕМИ

  • Увеличить шрифт
  • Уменьшить шрифт


<<   ЗМІСТ   >>

ТЕОРЕТИКО-МНОЖИННІ МЕТОДИ ПРИСКОРЕННЯ ПОШУКУ

Обробка безлічі фактів методами реляційної алгебри

При уважному розгляді прикладу, наведеного вище, можна бачити, що в передостанньому рядку табл. 3.2 міститься кінцевий результат пошуку, який отриманий без звернення до машини виводу, а тільки шляхом обробки індексів. А якщо помістити такий висновок в середу СУБД (системи управління базами даних), можна досягти суттєвого прискорення пошуку рішень.

Нехай в результаті відбору фактів для умов правила з (s u p : , Oj), с (s 2 , P 2 > про 2 ), ..., з ( s k , p k , про до ), де s ,, o t - або константа, або змінна, отримані безлічі кортежів Т = [1] , /., = (х а , x i2 ), якщо в умові правила дві змінні, г, = (х а ) - якщо одна змінна. Таким чином, для правила з kумов, отримуємо до таблиць приблизно наступного вигляду:

* 11

* 12

* 21

* 22

* »1

* 41

* 42

Якщо два або більше умов мають загальну змінну, то відповідні таблиці виявляються пов'язаними загальним обмеженням. В іншому випадку результат буде дорівнює декартового добутку таблиць, що зазвичай позбавлене сенсу.

Таблиці можуть мати зв'язки наступних типів:

  • 1) поєднання двох таблиць за випадковим збігом значень однієї або більше змінних у пари таблиць. У цьому випадку дві таблиці об'єднуються реляційним оператором INNER JOIN,
  • 2) фільтрація таблиці за умовою порівняння значення змінних між собою або змінною і значення. Ця функція виконується за допомогою умови WHERE (...).

Розглянемо на конкретних прикладах, як умови правил можуть транслюватися в оператори SQL. Для спрощення імпорту бази знань в СУБД створимо для фактів єдину таблицю F, що складається з стовпців S, Р, О, для зберігання суб'єкта, предиката і об'єкта відповідно. Запит на мові SQL для виведення фактів про відношенні «дядько - племінник (ца)» буде виглядати наступним чином:

SELECT F_1.Object AS Uncle, F. Object AS Nephew FROM F INNER JOIN F AS F_1 ON F. Sub j ect = F_1. Sub ject WHERE (((F. Predicate) = "is_parent")

AND ((F_l.Predicate) = "has_brother"))

Більш складне правило для відносини «падчерка» на мові SWRL:

hasChild (? xl,? x2) лhasSpouse (? xl,? x3)

лhasSex (? х2, female) лhasChild (? х4,? х2)

л differentFrom (? xl,? x4) л differentFrom (? хз,? х4) =>

=> HasStepDaughter (? Хз,? Х2)

Дане правило матиме наступний еквівалент мовою SQL:

SELECT DISTINCT F_l.Object AS Step_parent, F_2.Object

AS Step_daughter

FROM

((F INNER JOIN F AS F_1 ON F. Subject = F_1. Subject) INNER JOIN F AS F_2 ON F. Object = F_2 .Object)

INNER JOIN F AS F_3 ON F_3. Sub j ect = F_2. Ob j ect WHERE (F. Predicate = "is_parent"

And F_1.Predicate = "is_spouse" AND F_2.Predicate = "is_parent"

And F. Subject <> F_2 .Subject AND

F_1.Object <> F_2.Subject And F_3.Predicate = "has_sex"

AND F_3.Object = "female")

Оскільки потужність мови SQL істотно вище, ніж SWRL , слід очікувати, що будь-яка конструкція SWRL може транслюватися в SQL, а потужні засоби роботи з індексами в сучасних СУБД забезпечать високу швидкість масової обробки фактів правилами.

 
<<   ЗМІСТ   >>