Декларативные способы преобразования исходных данных в

advertisement
Симпозиум
«Онтологическое моделирование:
состояние и направления исследований и применения»
Звенигород, 20 – 21 мая 2008 года
Декларативные способы
преобразования
исходных данных в онтологии
Воробьев Владимир Иванович
Перминов Сергей Владимирович
Санкт-Петербургский институт
Информатики и Автоматизации РАН
[www.spiiras.nw.ru]
СПб, 14-я линия ВО, т. 328-43-69
Содержание
• Введение
• Постановка задачи преобразования
• Декларативный подход к преобразованию,
построение конвейера
• Пример функционального преобразования
• Преобразования из различных форматов данных
• Web как источник данных
• Примеры программных систем
Актуальность
• петабайтные наборы данных требуют новый
стиль работы.
• данные должны быть самоописываемыми
(метаданные)
• непроцедурные языки манипулирования
данными играют основную роль в обеспечении
поиска и анализа данных.
• данные эволюционизируют.
• эволюцию данных без затрагивания программ
• высокопроизводительные процессоры
онтологий общего назначения.
• метрики
Метрики независимые от данных
• Необходимы инварианты для контроля
трансформации данных:
• Симметрия (контроль невозможности некоторых
преобразований)
• Простота
• Порядок
• Энтропия
• Сохранение
• Информация
• Неоднозначность
Контексты данных, подлежащие
преобразованию
• Любые, зависят от постановки
задачи
–
–
–
–
Базы данных (реляционные, объектные…)
Форматы данных (текстовые, бинарные…)
XML-данные
Программы на различных языках…
• Размещение данных
– Локально (обращение к файловой системе)
– В локальной сети (сетевая ФС, SQL)
– В Интернет (многообразие сервисов доступа)
• Web (HTTP/HTML)
Императивный подход
• Постоянная смена «состояния»
программы
• Строки – команды ОС и процессору
регистры
int i = 0;
Int k = 5;
Int j = k - i;
k = 4;
i = j – k;
Задача преобразования
Исходные
контексты данных
•
•
•
•
?
Таблица Excel
XML-файл
Др. язык описания
Онтология на CycL или KIF…
Выходные
контексты данных
• RDF/OWL
• KIF
• CycL…
Возможные сложности:
• негибкость, сложность автоматизации
• оценка (качества) преобразования
• два программиста решат по-разному
(высокая степень свободы)
• зависят от программиста
Постановка задачи преобразования
• Необходимо снизить степень свободы в
реализации преобразования
• Автоматизация построения преобразования
(повторное использование компонентов)
• Компоненты = функции преобразования
• Упрощение (возможное построение
интерфейса)
• Выполнение в параллельных процессах
Компоненты преобразования
• Преобразование = функция
• λ-выражения как способ представления
функций
3+2
(λ x. x + 2) 3
(λ f. f 3) (λ x. x + 2)
0 := λ f x. x
1 := λ f x. f x
2 := λ f x. f (f x)
3 := λ f x. f (f (f x))
SUCC := λ n f x. f (n f x)
PLUS := λ m n f x. n f (m f x)
MULT := λ m n f. m (n f)
Преобразования без
промежуточных состояний
• Композиция функций:
K (H (G(F ( x )))  K  H  G  F ( x )
• Каналы в командной оболочке UNIX:
ls | grep test | cat > out.txt
• Преобразования строк в языке Java:
string.trim().replace(‘:’,’;’).toLowerCase().substring(2)
• Программа на языке Haskell:
main = interact $ show . apply length id . map toLower
where apply fnA fnB x = (fnA x, fnB x)
Конвейер
Входные данные
in
F1
F2
out
F3
G
H
Выходные данные
Пример преобразования
IDEF0
UML
(диаграмма классов)
Пример преобразования:
описание диаграммы IDEF0
Block_ID
Arrow_ID
hasArrowEnd
atBlock
ArrowEnd
rdfs:subClass
Output_ID
Control_ID
Mechanism_ID
Input_ID
Пример преобразования:
описание
диаграммы классов UML
Parameter_ID
parameter
type
Type
Method_ID
Attribute_ID
PrimitiveType_ID
attribute
method
Class_ID
Class_ID
rdfs:subPropertyOf
composes
inherits
Пример преобразования:
Фрагмент RDF-описания диаграммы IDEF0
<tf:Arrow rdf:ID="S.42">
<tf:name>Together</tf:name>
<tf:hasArrowEnd>
<tf:Mechanism rdf:ID="S.43">
<tf:atBlock rdf:resource="#S.8"/>
</tf:Mechanism>
</tf:hasArrowEnd>
<tf:hasArrowEnd>
<tf:Mechanism rdf:ID="S.44">
<tf:atBlock rdf:resource="#S.15"/>
</tf:Mechanism>
</tf:hasArrowEnd>
</tf:Arrow>
Пример преобразования: правило 1
дуги механизмов являются
объектами класса, для которых блок — это их
метод.
Запрос:
где: %class =
SELECT ?class ?name
WHERE {
%class .
_:class tf:name ?name }
?class a tf:Mechanism .
_:class a tf:Arrow .
_:class tf:hasArrowEnd ?class
Выходные логические тройки:
?class a tf:Class .
?class tf:name ?name
Примеры запросов на языке SPARQL
SELECT ?obj
WHERE {
?subj rdf:type tf:Arrow.
?subj tf:name ?obj.
}
SELECT ?obj
WHERE {
?subj a tf:Arrow.
?subj tf:name ?obj.
}
SELECT DISTINCT ?arrow ?s
WHERE {
?arrow a tf:Arrow.
?mechanism a tf:Mechanism.
?arrow tf:hasArrowEnd ?mechanism.
?arrow tf:name ?name.
}
• только для чтения
• http://jena.sourceforge.net/
Альтернатива представлению RDF:
N-Triples
<http://nil.org/ntriples/> <http://nil.org/creator> "Dave Beckett" .
<http://nil.org/ntriples/> <http://nil.org/creator> "Art Barstow" .
<http://nil.org/ntriples/> <http://nil.org/publisher> <http://an.org/> .
RDF-эквивалент:
<rdf:RDF xmlns:rdf=“..“ xmlns:nil="http://nil.org/">
<rdf:Description rdf:about="http://nil.org/ntriples/">
<dc:creator>Art Barstow</dc:creator>
<dc:creator>Dave Beckett</dc:creator>
<dc:publisher rdf:resource="http://an.org/"/>
</rdf:Description>
</rdf:RDF>
http://www.w3.org/TR/rdf-testcases/#ntriples
Пример преобразования: правило 2
дуги механизмов являются объектами класса, для
которых блок — это их метод.
Запрос:
SELECT
?class ?method ?name
WHERE {
%method .
?method tf:name ?name }
где: %method =
%class .
?method a tf:Block .
?class tf:atBlock ?method
Выходные логические тройки:
?class a tf:Class .
?method a tf:Method .
?class tf:method ?method .
?method tf:name ?name
Формализация преобразования (1)
N-Triples
RDF/OWL
шаблон
SPARQL
N-Triples
N-Triple
RDF/OWL
Формализация преобразования (2)
f (rdf )  makeRDF  delDuplicates  concat  map(templates, rdf )
templates  map(makeTemplate, sparqls, tripless )
makeTemplate(sparql , triples ) 
 rdf .makeTriples(request (sparql , rdf ), triples )
Haskell:
f = makeRDF . delDuplicates . concat . map templates
templates = map (uncurry makeTemplate) zip (sparqls,tripless)
makeTemplate sparql triples =
= \rdf -> makeTriples (request sparql rdf) triples
Функциональный подход
• map (*2) [1,2..100] = [2,4..200]
int[] is = new int[1000]
for (int i = 0; i < is.length; i++) {
is[i] = i*2;
}
return is;
• reduce (+) [1..100] = 5050
int[] is = new int[100]
int sum = 0;
for (int i = 0; i < is.length; i++) {
sum += is[i];
}
return sum;
[Google
MapReduce]
Haskell – чисто функциональный
подход
• нет императивных конструкций
• интерференция типов (type classes)
• «ленивые» вычисления
main = print . sum . take 100 $ [1..]
• полигон для разработки чисто функциональных
(являющихся декларативными) программ
• Уникальное свойство: декларативная
реализация ввода-вывода
main = writeFile output . process =<< readFile input
Формализация преобразования (3)
Schema/Lisp:
(define (f rdf)
(make-rdf
(del-duplicates
(concat (map templates rdf)))))
(define templates
(user-map (make-template sparqls tripless)))
(define (make-template sparql triples)
(lambda rdf
(make-triples (request sparql rdf) triples)))
Формализация преобразования (4)
N-Triples
?
шаблон
запрос?
N-Triples
N-Triple
RDF/OWL
Форматы данных: данные + метаданные
CSV
XML
Иван,Иванович,Иванов¶
Петр,Петрович,Петров¶
<html>
<head>
<title>Кленовые</title>
</head>
<body>
<h1>Кленовые</h1>
<p>Семейство растений</p>
</body>
</html>
Таблица, RDB
Имя
Отч.
Фам.
Иван
Иванович
Иванов
Петр
Петрович
Петров
Исходные данные: CSV
• parse = split “,” . lines
Иван,Иванович,Иванов¶
Петр,Петрович,Петров¶
• Регулярные выражения (regex)
• Утилиты UNIX (awk, sed)
• Библиотеки (API) языков
программирования
Исходные данные: RDB, ODB
• SQL
SELECT *
FROM books
WHERE price > 100.00
ORDER BY title;
• OQL
SELECT pc.cpuspeed
FROM PCs pc
WHERE pc.ram > 64
Имя
Отч.
Фам.
Иван
Иванович
Иванов
Петр
Петрович
Петров
Исходные данные: XML
• xPath
1. //head/title/string(.)
2. //dict/key[string(.)='Comments']/
.[following-sibling::string[1]/
contains(string(.),'>')]/
following-sibling::
key[string(.)='Location']/
following-sibling::string[1]/string(.)
• xQuery
• XSLT
XML
<html>
<head>
<title>Кленовые</title>
</head>
<body>
<h1>Кленовые</h1>
<p>Семейство растений</p>
</body>
</html>
Язык трансформаций XSLT
<xsl:stylesheet xmlns:xsl=".." version="1.0">
<xsl:template match="/persons">
<root><xsl:apply-templates select="person"/></root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
• язык запросов
</xsl:stylesheet>
• язык шаблонов
• функциональный язык
Web как источник данных
• Web уже сейчас – большая
(слабоструктурированная) БД
– Интерфейсы к БД
– Тексты
– Словари
– Каталоги…
• HTTP/HTML
• Потенциал Web в плане интеграции
ресурсов
Преобразование контекста данных в
Web (1)
XPath: //td[@class=‘first’]/a
//div[@class=‘body’]//h1/a
//div[@class=‘body article’]/b
//div[@class=‘body article’]
Преобразование контекста данных в
Web (2)
словарь
Страница
статья
Малый
энциклопедический…
название текст
Кленовые
Кленовые,
(Aceraceae), сем.
растений из класса…
меню
1
Везде
2
…
Новости
Исходные данные:
разные форматы
• Собственные языки запросов,
программные интерфейсы языков
программирования
• Синтаксические анализаторы (парсеры)
– ANTLR
– JavaCC
–…
grammar T;
def : modifier+ 'int' ID '=' INT ';‘
| modifier+ 'int' ID ';‘ ;
modifier : 'public' | 'static' ;
INT : '0'..'9'+ ;
ID : 'a'..'z'+ ;
WS : (' '|'\r'|'\n')+ {$channel = HIDDEN;} ;
Особый вид парсера: Parsec
expr = buildExpressionParser table factor
<?> "expression“
table = [[op "*" (*) AsscocLeft, op "/" div AssocLeft] ,
[op "+" (+) AssocLeft, op "-" (-) AssocLeft]] where
op s f assoc = Infix (do{ string s; return f}) assoc
factor = do
char '(‘
x <- expr
• Описывает грамматику в BNF
char ')‘
• Встроен в язык Haskell
return x
<|> number
<?> "simple expression"
Исходные данные: текстовые (1)
Исходные данные: текстовые (2)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
0.6% 1890
0.6% 1907
0.6% 2
0.6% 2001
0.6% 2008
слово
0.6% 5
1890
0.6% 8
0.6% 90
вес
2.4% A
0.6% Acer
0.6%
...
0.6% цветами
0.6% чашелистиков
0.6% экипажном
0.6% энциклопедический
0.6% явор
Страница
слово
слово
1907
вес
0.6%
…
явор
вес
0.6%
Исходные данные: текстовые (3)
семантические классы
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
0.6% 1890
0.6% 1907
знания
0.6% 2
0.6% 2001
литература
природа
0.6% 2008
0.6% 5
0.6% 8
книга
корресп.
0.6% 90
2.4% A
растения
трактат
0.6% Acer
повесть
...
0.6% цветами
травы
0.6% чашелистиков
деревья
0.6% экипажном
0.6% энциклопедический
0.6% явор
Обозначение:
- подкласс
Тузов В.А.
ФО
неодуш.
вещь
техника
транспорт
сухопутный
без двигателя
Исходные данные: текстовые (4)
заголовок
Яндекс.Словари…
словарь
Страница
сем. классы
статья
меню
Малый
энциклопедический…
название
Кленовые
текст
ФО
1
…
2 знания
Везде
природа
Новости
Кленовые,
(Aceraceae),...
книга
растения
трактат
Возможности
для семантического поиска
вес
деревья
0.2%
вес
1.4%
Обозначение:
- подкласс
…
Примеры:
Поиск на основе семантических классов (1)
Примеры:
Поиск на основе семантических классов (2)
• Традиционный поиск:
(эффективный) поисковый запрос ограничен 3-10 ключевыми словами
• Поиск на основе семантических классов:
эффективный поисковый запрос неограничен
Примеры: ЕНИП
СПбНЦ РАН [spbrc.nw.ru]
Cовместный проект с ВЦ РАН им. А.А.Дородницына
Примеры: ЕНИП
предоставление данных
http://www.spbrc.nw.ru
/ras/view/person/general.
html
?id=14287
http://www.spbrc.nw.ru
/ras/view/person/general.
rdf
?id=14287
Примеры: ЕНИП
преобразование данных
Примеры: ЕНИП
интеграция [enip.ras.ru]
Выводы
• Со смещением центра внимания при создании
ПО с проектирования алгоритмов на
проектирование структур данных требуются
новые, декларативные подходы к
преобразованию данных
• Необходимо снижение степени свободы при
разработке преобразователей данных
• Рассмотрено использование функционального
подхода без внутренних состояний, с
шаблонами и декларативных языками запросов
Список литературы:
[dcmi]
DCMI
http://dublincore.org/
[enip]
ENIP
http://enip.ras.ru/index.html
[esa]
ResearchChannel Enhancing Text Representation Through Knowledge-Based Feature
Generation
http://www.researchchannel.org/prog/displayevent.asp?rid=3604
[foaf]
FOAF
http://www.foaf-project.org/
[rss]
RDF RSS
http://web.resource.org/rss/1.0/spec
[protege]
Protégé Ontology Editor
http://protege.stanford.edu/
[sparql]
SPARQL
http://www.w3.org/TR/rdf-sparql-query/
[sw]
Berners-Lee T., Hendler J., Lassila O.
The Semantic Web
Scientific American. 2001. No. 5. P. 34-43.
[sw-intro]
Henry Story
RDF - Connecting Software and People
http://bblfish.net/work/presentations/2005/
[sw-primer]
Grigoris Antoniou, Frank van Harmelen.
A Semantic Web Primer - MIT Press: 2004
[swoogle]
Swoogle
http://swoogle.umbc.edu/
[tuzov]
Tuzov V. A.
Computer Semantics of Russian Language
SPb.: SPbSU, 2003.
[vcard]
RDF vCard
http://www.w3.org/TR/vcard-rdf
[w3c]
World Wide Web Consortium (W3C)
http://www.w3.org/
Download