Использование онтологий

Для поиска слов, связанных указанными в онтологии отношениями, используется функция semantics().

Онтологии относятся к словарям категории Semantics и содержат информацию о связях между объектами определенной предметной области. Онтология представляет собой граф, вершинами которого являются объекты предметной области, а ребрами — отношения между ними.

Тип онтологии

Пояснение

Пример

Универсальная

Содержит широкий спектр общезначимых понятий

WordNet, SNePS

Специализированная

Содержит понятия конкретной предметной области

Gene Ontology, Human Disease Ontology

По умолчанию используется одна из наиболее известных универсальных онтологий — WordNet. Некоторые из представленных в ней типов отношений приведены в таблице ниже.

Тип отношения

Пояснение

Пример

meronym

мероним

целое → часть

автомобиль → двигатель

holonym

холоним

часть → целое

двигатель → автомобиль

hypernym

гипероним

частное → общее

доверенность → документ

hyponym

гипоним

общее → частное

документ → доверенность

antonym

антоним

понятие → противоположное понятие

холодный → горячий

synonym

синоним

понятие → схожее понятие

холодный → ледяной

Для корректной работы функции необходимо убедиться, что нужная онтология подключена к узлу. Для этого нужно щелкнуть по узлу правой кнопкой мыши, зайти в «Настройки» и открыть вкладку «Словари». Слева окна расположен список категорий словарей. При выборе Semantics справа появится список доступных онтологий. Необходимо выбрать нужные словари, нажать кнопку «ОК» и выполнить узел. Подробнее о работе со словарями можно узнать в разделе «Использование словарей»

Синтаксис

semantics([максимальный_уровень,] тип_отношения,аргумент[,…])

Поиск по онтологии производится без учета контекста, к примеру, запрос semantics(Meronym, здание) найдет слово «крыша» как во фразе «крыша дома», так и во фразе «автомобильная крыша».

Аргументы

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

В качестве второго обязательного аргумента функция принимает одного из участников указанного типа_отношения. Можно указать произвольное количество аргументов в начальной форме, разделяя их вертикальной чертой («|»). К примеру, semantics(synonym, абразивный|шершавый).

Необязательным аргументом является максимальный_уровень, который принимает числовое значение, определяющее максимальное расстояние между указанным аргументом и связанным с ним словом в графе онтологии. К примеру, запрос semantics(1, meronym, автомобиль) найдет только составные части автомобиля по онтологии, в то время как запрос semantics(2, meronym, автомобиль) найдет составные части как автомобиля, так и его двигателя.

Параметры

В таблице ниже приведены опциональные именованные параметры, которые поддерживает функция semantics().

Параметр

Допустимые значения

Пояснение

Значение по умолчанию

dictionary

Name1| Name2|…​

Позволяет указать имя словаря, по которому должен осуществляться поиск, к примеру, semantics(synonym, абразивный, dictionary:="WordNet"). Для корректной работы функции указанные словари должны быть подключены в свойствах узла.

dictionary:=WordNet

collect

last/all

При collect:=last функция возвращает только элементы самого нижнего уровня при поиске нижележащих понятий (гипонимы, меронимы) и только элементы самого верхнего уровня при поиске вышележащих понятий (гиперонимы, холонимы). При collect:=all функция возвращает элементы всех уровней. См. примеры 1, 2.

collect:=last для отношений типа «гипероним», «холоним», «антоним»; collect:=all для других типов отношений.

max_level

числовое значение

Определяет максимальное расстояние между аргументом и связанным с ним словом в графе онтологии (аналогично аргументу максимальный_уровень). См. пример 3.

max_level:=1 для отношений типа «гипероним», «холоним», «антоним»; max_level:=20 для других типов отношений.

min_level

числовое значение

Исключаются слова, находящиеся на расстоянии меньше указанного значения от аргумента. При min_level:=0 функция также возвращает исходный аргумент, при min_level:=1 — все связанные с аргументом слова, за исключением самого аргумента. См. пример 4.

min_level:=0

level

числовое значение

Возвращает только элементы указанного уровня. См. пример 5.

synset_id

id

Позволяет выбрать отдельные значения многозначных слов. Идентификационные номера элементов (synset_id) указаны в словаре. Если необходимо указать несколько элементов, следует перечислить их значения через вертикальную черту (synset_id:=id1|id2) или создать несколько именованных параметров, добавляя суффикс с порядковым номером к имени параметра (synset_id_1:=id1, synset_id_2:=id2) См. пример 11.

pos

yes/no

Позволяет игнорировать часть речи, указанную в онтологии. См. примеры 12, 13.

yes

stem

yes/no

позволяет учитывать/игнорировать форму слова. Если stem:=yes, то словарные записи будут считаться словоформами и предварительно приводиться к нормальной форме. См. пример 14.

no

allow_punct

yes/no

Регулирует допустимость знаков препинания внутри словарного вхождения. Если allow_punct:=no, тогда словарные вхождения, включающие знаки препинания, будут игнорироваться при поиске.

yes

Примеры

В примерах 1, 2, 3, 4, 5 приведен фрагмент универсальной семантической сети WordNet, иллюстрирующий работу функции semantics() для типа отношения «мероним» и аргумента «здание».

1. semantics(meronym, здание, collect:=last)

pdl meronym last rus

2. semantics(meronym, здание, collect:=all) = semantics(meronym, здание)

pdl meronym all rus

3. semantics(meronym, здание, max_level:=2)

pdl meronym maxlevel2 rus

4. semantics(meronym, здание, min_level:=2)

pdl meronym minlevel2 rus

5. semantics(meronym, здание, level:=2)

pdl meronym level2 rus

Примеры 6, 7, 8, 9, 10 иллюстрируют работу функции semantics() с помощью фрагмента специализированной семантической сети.

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

Тип отношения

Пояснение

Пример

represented_by

связывает тип приложения и конкретное приложение данного типа

Video game → Need for Speed Rivals

developed_by

связывает приложение и компанию-разработчика

Need for Speed Rivals → Ghost Games

subsidiary_of

связывает компанию-разработчика и родительскую компанию

Ghost Games → Electronic Arts

6. semantics(represented_by, "Instant messenger client")

pdl semantics 1 rus

7. semantics(represented_by, "Instant messenger client", collect:=last)

pdl semantics 2 rus

8. semantics(represented_by, "Instant messenger client", license_type:="proprietary", min_level:=1)

pdl semantics 3 rus

9. semantics(developed_by, semantics(represented_by, "Instant messenger client", license_type:="proprietary", collect:=last), min_level:=1)

pdl semantics 4 rus

10. semantics(subsidiary_of, semantics(developed_by, semantics(represented_by, "Instant messenger client", license_type:="proprietary", collect:=last), min_level:=1), min_level:=1)

pdl semantics 5 rus

Пример 11 опирается на синонимы слова «основание» в универсальной семантической сети WordNet. Cлово «основание» входит в несколько синсетов (смысловых единиц), среди которых «опорная часть» (synset_id=C96540FAB216EE92) и «причина, достаточный повод» (synset_id=89A031C374A64976). Ниже приведены фрагменты соответствующей словарной статьей в редакторе словарей.

pdl semantics 7 rus

11. semantics(synonym, synset_id:=C96540FAB216EE92) найдет «фундамент», «опора», «основание», но не найдет «причина», «повод». При отсутствии параметра synset_id запрос semantics(synonym, основание) найдет все возможные синонимы слова «основание»: «фундамент», «опора», «основание», «причина», «повод» и т.д.

12. semantics(synonym, воинский, pos:=no) найдет синонимы независимо от части речи аргумента, т.е. как во фразе «военная операция французских войск» («военная» — прилагательное), так и во фразе «французские военные приступили к наведению порядка» («военные» — существительное).

13. semantics(synonym, воинский)=semantics(synonym, воинский, pos:=yes) найдет только синонимы-прилагательные, т.е. синонимов не будет найдено во фразе «французские военные приступили к наведению порядка» («военные» — существительное).

14. semantics(synonym, "делать пересадку", pos:=no, stem:=yes) найдет «пересаживаться» и «пересадить», если в словаре синонимов существует пара «делать пересадку» и «пересаживаться». В таком случае алгоритм сначала получает слово из словаря («пересаживаться»), а затем приводит к нормальной форме «пересадить». При stem:=no найдется только «пересаживаться», потому что в этом случае не происходит нормализация.

15. semantics(hyponym, "Nervous system diseases") найдет «disease, cerebrovascular» и «cardiovascular disease». Чтобы исключить из поиска вхождения со знаками препинания, нужно использовать запрос semantics(hyponym, "Nervous system diseases", allow_punct:=no).

Пример задачи: Поиск информации о неисправных деталях автомобиля

Чтобы найти информацию о том, какие детали автомобиля неисправны, необходим их перечень. Можно создать словарный список и перечислить их, а можно сэкономить усилия и воспользоваться функцией semantics(), которая найдет все меронимы слова «автомобиль», указанные в онтологии.

near(40, near(3, semantics(Meronym, автомобиль, max_level:=2), неисправность), автомобиль)

Данный запрос найдет все тексты, где меронимы слова «автомобиль» употребляются на расстоянии 3 от слова «неисправность». Кроме того, задается контекст — требуется, чтобы найденная последовательность была на расстоянии 40 от слова «автомобиль».

pdl semantics 6 rus