База данных результатов разбора
Все разборы предложений хранятся в базе данных Emotional.
Схема
Таблицы
fact_valencies (факты и семантические валентности)
Это центральная таблица базы, в ней хранятся семантические разборы предложений. Одна строка таблицы – один сегмент структуры: слово-вершина этого сегмента (поле lemma), семантическая валентность (valency_alias), которую этот сегмент занимает в этом факте (fact).
Поля таблицы fact_valencies:
- id, int
- fact, int, id факта (поле id из таблицы facts)
- referent, int, референт (поле id из таблицы referents)
- valency_id, int, id семантической валентности
- valency_alias, varchar, название семантической валентности
- lemma_id, int, id леммы
- lemma, varchar, лемма
- wordform_id, int, id словоформы
- wordform, varchar, словоформа
Запрос, который выводит все предикаты, которые есть в базе, с указанием id факта:
Результат:
lemma | fact |
---|---|
превращаться | 3602304 |
перевезти | 3602363 |
смочь | 3602378 |
мочь | 3602381 |
подумать | 3602386 |
Объединив таблицу саму с собой, можно делать более сложные запросы. Например, вывести всё, что пьют, для этого нужно найти все факты, в которых место предиката занимает лемма пить, после чего вывести значения лемм, занимающих в этих фактах место пациенса (в конструкции пить Икс Икс занимает валентность пациенса при предикате пить).
Результат:
lemma | fact |
---|---|
вода | 3604495 |
чай | 3604512 |
вода | 3604547 |
пиво | 3626456 |
facts (все факты)
В этой таблице хранится список фактов. Факт – это семантическая структура предложения: предикат (и его семантические признаки) и его актанты (и их семантические признаки). Из одного предложения может быть извлечено несколько фактов – по числу предикатов в этом предложении. Из предложений без предиката извлекается один факт, однако его семантические валентности (см fact_valencies) остаются незаполненными.
Поля таблицы facts:
- id, int
- meta, jsonb, метаинформация о факте: версии всех компонентов анализа
- hash, varchar, hash конкретного запуска
Запрос, который выводит все предложения, из которых были извлечены факты:
Результат:
id | sentence |
---|---|
870645 | себе испортил, людям испортил. |
870639 | цокал языком, стыдил, укорял- я его почти не слушала. |
870640 | цокал языком, стыдил, укорял- я его почти не слушала. |
870642 | - крутил башкой турок,- зачем все испортил? |
870644 | себе испортил, людям испортил. |
Видно, что из предложения цокал языком, стыдил, укорял- я его почти не слушала. извлечено по крайней мере два факта: 870639, 870640, всего в этом предложении четыре факта: 1) цокал языком, 2) стыдил, 3) укорял, 4) я его почти не слушала.
Можно это проверить. Запрос, который выводит id фактов, которые были извлечены из конкретного предложения:
Результат подтверждает: фактов действительно четыре:
id | sentence |
---|---|
870638 | цокал языком, стыдил, укорял- я его почти не слушала. |
870641 | цокал языком, стыдил, укорял- я его почти не слушала. |
870639 | цокал языком, стыдил, укорял- я его почти не слушала. |
870640 | цокал языком, стыдил, укорял- я его почти не слушала. |
Теперь объединим таблицы facts и fact_valencies, чтобы увидеть, какие леммы занимают какие валентности в этих четырех фактах:
Результат:
fact_id | lemma | valency_alias |
---|---|---|
870638 | цокать | p |
870638 | язык | instr |
870639 | стыдить | p |
870640 | укорять | p |
870641 | я | ag |
870641 | он | pat |
870641 | слушать | p |
fact_markers (семантические признаки сегментов факта)
В этой таблице хранится информация о том, какие семантические признаки (маркеры) есть у сегмента, занимающего некоторую валентность в некотором факте. Для каждого объекта из таблицы fact_valencies в таблице fact_markers может быть как множество строк (по одной на каждый семантический признак каждой леммы, входящей в сегмент), так и ни одной строки (в случае, если у всех лемм, входящих в этот сегмент, не размечено ни одного семантического маркера).
Поля таблицы fact_markers:
- id, int
- valency, int, ссылка на объект из таблицы fact_valencies
- marker_id, int, id семантического признака (поле sql_id таблицы markers)
- marker, к удалению
- attr, int, семантическая зона
Выведем семантические признаки для всех сегментов конкретного факта, например, для факта я его почти не слушала (id 870641). Для этого нужно объединить таблицы fact_valencies и fact_markers:
Результат:
fact_id | lemma | valency_alias | marker_id |
---|---|---|---|
870641 | я | ag | 1 |
870641 | я | ag | 11 |
870641 | я | ag | 14 |
870641 | я | ag | 62 |
870641 | он | pat | 14 |
870641 | слушать | p | 31 |
870641 | слушать | p | 36 |
870641 | слушать | p | 187 |
870641 | слушать | p | 389 |
Видно, что у сегмента с вершиной он только один семантический признак, в то время как у сегмента с вершиной слушать их четыре. Из этой таблицы не понятно, что это за признаки, они описаны в таблице markers.
h3. markers (все семантические признаки)
В этой таблице перечислены все семантические признаки. Важно, что с таблицей fact_markers таблица markers связана полем sql_id.
Поля таблицы markers:
- id, int
- sql_id, int, реальный идентификатор семантического маркера
- name, varchar, название семантического маркера
Усовершенствуем запрос, выводящий семантические признаки для всех сегментов конкретного факта, из главы про таблицу fact_markers. Теперь запрос будет выводить не просто идентификаторы семантических признаков сегментов факта я его почти не слушала (id 870641), но и названия этих признаков:
Результат:
fact_id | lemma | valency_alias | marker_id | marker_name |
---|---|---|---|---|
870641 | я | ag | 1 | ч-некто |
870641 | я | ag | 11 | ч-другой |
870641 | я | ag | 14 | о-об |
870641 | я | ag | 62 | ч-ПРИНЦИПАЛ |
870641 | он | pat | 14 | о-об |
870641 | слушать | p | 31 | пм-думать |
870641 | слушать | p | 36 | пм-слышать |
870641 | слушать | p | 187 | пм-внимание |
870641 | слушать | p | 389 | л-не |
Рассмотрим запрос, который обращен не к конкретному факту, а ко всей базе. Он выводит все предикаты, имеющие конкретный семантический признак, на примере семантического признака пф-ингест, обозначающего прием пищи.
Результат:
fact_id | lemma | valency_alias | marker_name |
---|---|---|---|
799889 | p | есть | пф-ингест |
799893 | p | есть | пф-ингест |
800138 | p | хлебнуть | пф-ингест |
800142 | p | выпить | пф-ингест |
800116 | p | хлебнуть | пф-ингест |
800117 | p | закусить | пф-ингест |
sentences (все предложения со всеми словами)
В эту таблицу сохраняются все прошедшие анализ предложения. Если в таблице fact_valencies перечислены только леммы-вершины сегмента, то в таблице sentences в поле sentence в формате json перечислены все слова предложения со всеми возможными омонимами.
Поля таблицы sentences:
- id, int
- meta, jsonb, метаинформация о предложении: версии всех компонентов анализа
- sentence, jsonb, все сегменты предложения
- hash, varchar, hash конкретного запуска
Запрос, который выводит все предложения, в которых есть конкретное слово, например слово смеяться:
Результат:
sentence |
---|
но ольга умеет смеяться над собой тайский трансвестит развлёк российских туристов, спародировав песню ольги бузовой” под звуки поцелуев”. |
( and today our royal navy is about as powerful as a f@rt in a teacup- от переводчика, долго смеялся и не стал заменять английскую идиому на русскую, решил сохранить британский колорит))). |
и обязательно продолжайте шутить и смеяться— это удлиняет жизнь,— закончил своё поздравление министр. |
глава мид рф сергей лавров поздравил россиян с новым годом и посоветовал как можно больше смеяться и шутить. |
( смеётся. |
несмотря на полную адекватность и ориентированность, он то смеялся над обращённой к нему фразой, то пытался вспоминать молодость, которая, по его мнению, тоже была полна веселья и радости. |
пятиминутка ещё не закончена,— заведующий, уже устав смеяться, взывал к порядку. |
— она так здорово играет, так здорово смеется, так здорово читает и катается на роликах, что я не верю тем докторам, о которых ты говорил. |
она смеётся, радуется отличной погоде и отправляется на прогулку. |
во время выступления бирна она много смеялась и одновременно ела m&m. |
syntax (синтаксические разборы)
В этой таблице хранятся синтаксические разборы предложений.
Поля таблицы syntax:
- id, int
- meta, jsonb, метаинформация о дереве: версии всех компонентов анализа
- tree, jsonb, синтаксическое дерево
- hash, varchar, hash конкретного запуска