Skip to content

Instantly share code, notes, and snippets.

@mitya57
Last active October 24, 2015 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitya57/4e87f1758ceeb6f14c37 to your computer and use it in GitHub Desktop.
Save mitya57/4e87f1758ceeb6f14c37 to your computer and use it in GitHub Desktop.
Описание модели онтологий
#ifndef ONTXX_OBJECT_HPP
#define ONTXX_OBJECT_HPP
#include <cstdint>
#include <string>
#include <vector>
/** Base objects of the Meta-Ontology [MO].
*
* Root Object
* +- Ontology
* +> Meta-Ontology
* +> Ontology of Scientific Activity
* +- Relation
* +> Part of Ontology denoted by []
* +> Is Instance denoted by +>
* +> Is Subclass denoted by +-
*
* All other direct subclasses of the Root Object are to be defined in
* other ontologies, such as Ontology of the Scientific Activity [SA],
* and ontologies of every science branch.
*/
namespace OntXX {
/* Pre-defined objects */
static const std::string root_object = "RootObject";
static const std::string relation_isinstance = "IsInstance";
static const std::string relation_issubclass = "IsSubClass";
static const std::string relation_partofontology = "PartOfOntology";
static const uint16_t Edge_ObjectIsFirst = 0x1;
static const uint16_t Edge_Symmetric = 0x2;
/* Forward declarations */
struct EdgeInternal;
struct Object;
/* Internal struct used to represent the edges */
struct EdgeInternal {
Object *other_object; /* Pointer to the other object */
Object *relation; /* Pointer to the relation */
uint16_t edge_flags; /* Edge flags, see constants above */
};
/* The main class in the ontologies system */
struct Object {
std::string canonical_name; /* Canonical name */
std::vector<std::string> names; /* Other names */
std::vector<EdgeInternal> edges; /* Edge objects */
};
}
#endif /* ONTXX_OBJECT_HPP */

Построение онтологий

Задачу построения онтологий можно разбить на три части:

  1. Построение базового каркаса для онтологии.
  2. Механизм для автоматического создания новых слоёв онтологии.
  3. Механизм для ручного ввода новых слоёв онтологии.

Для решения первой задачи я по-прежнему предлагаю использовать сервис DBpedia. Разумеется, можно будет некоторые части базового каркаса править вручную, а также использовать другие источники структурированной информации.

Вторая задача сводится к извлечению данных из неструктурированных и полуструктурированных текстов. Для таких текстов сначала производится морфологический анализ (например, с помощью сервиса OpenCorpora и модуля pymorphy2). В результате анализа для каждой единицы текста строится морфологически размеченное дерево. Затем, для каждого отношения строится шаблон, описывающий модель извлечения этого отношения из дерева. Принцип функционирования шаблонов похож на принцип функционирования регулярных выражений, за тем исключением, что шаблоны применяются не к «сырому» тексту, а к дереву. После извлечения отношений они проходят некоторые проверки на соответствование требованиям онтологии, после чего добавляются в онтологию.

Третья задача сводится к построению интерфейса для добавления новой информации в онтологию. На мой взгляд, наиболее универсальный интерфейс должен выглядеть следующим образом:

  • Запросы к онтологии выполняются на одном из специализированных языков, например SPARQL или GraphQL.
  • Имеется API для одного или нескольких языков программирования, позволяющее получать информацию из онтологии и добавлять информацию в неё. Такой интерфейс может либо общаться с онтологией при помощи запросов, либо взаимодействовать с базой данных напрямую.
  • Создаётся графический интерфейс для удобного просмотра и редактирования онтологий. Интерфейс использует API из предыдущего пункта.

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

Структура онтологии

Основными понятиями онтологии будут:

  • Классы — элементы древовидной структуры, использующиеся для классификации объектов. Примеры классов: «Отношение», «Раздел науки», «Учёный», «Научное достижение». У каждого класса могут быть подклассы, но множественное наследование не допускается.
  • Объекты — экземпляры классов. Например, конкретный учёный является экземпляром одного из подклассов класса «Учёный».
  • Свойства объектов. Набор свойств каждого объекта определяется его классом. Например, для учёного известны страна, год рождения и т.п.
  • Тройки объектов, описывающие отношения. Третий объект всегда должен быть экземпляром одного из подклассов класса «Отношение».

Данные в онтологии хранятся в виде структуры, совместимой с одной из разновидностей формата OWL. Для непосредственного хранения данных в памяти используется база данных (например, одна из баз данных SQL). Дополнительным преимуществом такой базы будет поддержка контроля версий, так как отслеживание изменений в онтологии будет требоваться во время разработки и тестирования системы.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment