Задачу построения онтологий можно разбить на три части:
- Построение базового каркаса для онтологии.
- Механизм для автоматического создания новых слоёв онтологии.
- Механизм для ручного ввода новых слоёв онтологии.
Для решения первой задачи я по-прежнему предлагаю использовать сервис DBpedia. Разумеется, можно будет некоторые части базового каркаса править вручную, а также использовать другие источники структурированной информации.
Вторая задача сводится к извлечению данных из неструктурированных и полуструктурированных текстов. Для таких текстов сначала производится морфологический анализ (например, с помощью сервиса OpenCorpora и модуля pymorphy2). В результате анализа для каждой единицы текста строится морфологически размеченное дерево. Затем, для каждого отношения строится шаблон, описывающий модель извлечения этого отношения из дерева. Принцип функционирования шаблонов похож на принцип функционирования регулярных выражений, за тем исключением, что шаблоны применяются не к «сырому» тексту, а к дереву. После извлечения отношений они проходят некоторые проверки на соответствование требованиям онтологии, после чего добавляются в онтологию.
Третья задача сводится к построению интерфейса для добавления новой информации в онтологию. На мой взгляд, наиболее универсальный интерфейс должен выглядеть следующим образом:
- Запросы к онтологии выполняются на одном из специализированных языков, например SPARQL или GraphQL.
- Имеется API для одного или нескольких языков программирования, позволяющее получать информацию из онтологии и добавлять информацию в неё. Такой интерфейс может либо общаться с онтологией при помощи запросов, либо взаимодействовать с базой данных напрямую.
- Создаётся графический интерфейс для удобного просмотра и редактирования онтологий. Интерфейс использует API из предыдущего пункта.
Для дальнейшего продумывания модели добавления информации в онтологию, требуется построение примеров онтологий различных научных областей.
Основными понятиями онтологии будут:
- Классы — элементы древовидной структуры, использующиеся для классификации объектов. Примеры классов: «Отношение», «Раздел науки», «Учёный», «Научное достижение». У каждого класса могут быть подклассы, но множественное наследование не допускается.
- Объекты — экземпляры классов. Например, конкретный учёный является экземпляром одного из подклассов класса «Учёный».
- Свойства объектов. Набор свойств каждого объекта определяется его классом. Например, для учёного известны страна, год рождения и т.п.
- Тройки объектов, описывающие отношения. Третий объект всегда должен быть экземпляром одного из подклассов класса «Отношение».
Данные в онтологии хранятся в виде структуры, совместимой с одной из разновидностей формата OWL. Для непосредственного хранения данных в памяти используется база данных (например, одна из баз данных SQL). Дополнительным преимуществом такой базы будет поддержка контроля версий, так как отслеживание изменений в онтологии будет требоваться во время разработки и тестирования системы.