YARN/Данные
Автор: Дмитрий Усталов при поддержке РГНФ[1]. |
В проекте YARN тезаурус представлен в виде реляционной базы данных. На сайте проекта доступен актуальный дамп базы данных: http://russianword.net/yarn_development-20131114.sql.
Содержание |
Основные сущности
Существует четыре основных сущности: слово, синсет, отношение между синсетами, отношение между словами. Основное внимание на первом этапе разработки проекта уделяется работе со словами и синсетами.
Понятие «слово» включает в себя:
- лексему;
- присвоенную грамматическую категорию по словарю А. А. Зализняка;
- позицию ударной гласной буквы;
- список URI источников данного лексемы.
Понятие «синсет» включает в себя:
- множество определений («смыслов»);
- множество словоупотреблений (не путать с понятием слова).
Понятие «определение» включает в себя:
- текстовую запись определения;
- название источника данного определения;
- URI источника данного определения.
Понятие «словоупотребление» включает в себя:
- ссылку на существующее слово;
- помету о нестандартной грамматике в виде флага;
- список иных помет;
- множество примеров словоупотребления.
Понятие «пример словоупотребления» включает в себя:
- текстовую запись словоупотребления;
- название источника данного словоупотребления;
- URI источника данного словоупотребления.
Допущения и соглашения
При проектировании схемы данных учитывалось два основных требования:
- поддержка версионности и возможность быстрого переключения между версиями объектов;
- возможность модерирования записей и их одобрения модераторами ресурса.
Внимание! Таблицы с лингвистическими данными имеют строгие требования к именованию:
-
current_words
— текущие версии слов, которые видят пользователи в настоящий момент; -
words
— предыдущие версии слов из таблицыcurrent_words
.
Для обеспечения версионности связей между синсетами и определениями, синсетами и словоупотреблениями, словоупотреблениями и примерами, использован встроенный в PostgreSQL тип данных ARRAY
. Поля, хранящие списки идентификаторов соответствующих записей, заканчиваются на _ids
. Например: samples_ids
.
Формат данных детально описан в репозитории проекта на GitHub: https://github.com/xoposhiy/yarn/tree/master/formats.
Схема данных
Слова
-- -- Name: current_words; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_words ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, word CHARACTER VARYING(255) NOT NULL, grammar CHARACTER VARYING(255), deleted_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1, accents INTEGER[] DEFAULT '{}'::INTEGER[], uris CHARACTER VARYING(255)[] DEFAULT '{}'::CHARACTER VARYING[] ); -- -- Name: words; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE words ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, created_at TIMESTAMP WITHOUT TIME zone NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, word CHARACTER VARYING(255) NOT NULL, grammar CHARACTER VARYING(255), deleted_at TIMESTAMP WITHOUT TIME zone, word_id INTEGER NOT NULL, accents INTEGER[] DEFAULT '{}'::INTEGER[], uris CHARACTER VARYING(255)[] DEFAULT '{}'::CHARACTER VARYING[] );
Синсеты
-- -- Name: current_synsets; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_synsets ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, deleted_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, words_ids INTEGER[] DEFAULT '{}'::INTEGER[], definitions_ids INTEGER[] DEFAULT '{}'::INTEGER[] ); -- -- Name: synsets; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE synsets ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, deleted_at TIMESTAMP WITHOUT TIME zone, synset_id INTEGER, created_at TIMESTAMP WITHOUT TIME zone, words_ids INTEGER[] DEFAULT '{}'::INTEGER[], definitions_ids INTEGER[] DEFAULT '{}'::INTEGER[] ); -- -- Name: raw_synsets; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE raw_synsets ( id INTEGER NOT NULL, words_ids INTEGER[] DEFAULT '{}'::INTEGER[] NOT NULL, definitions_ids INTEGER[] DEFAULT '{}'::INTEGER[] NOT NULL, author_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone NOT NULL, updated_at TIMESTAMP WITHOUT TIME zone NOT NULL );
Определения
-- -- Name: current_definitions; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_definitions ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, text text NOT NULL, SOURCE CHARACTER VARYING(255), uri CHARACTER VARYING(255), updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: definitions; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE definitions ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, text text NOT NULL, SOURCE CHARACTER VARYING(255), uri CHARACTER VARYING(255), definition_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone );
Словоупотребления
-- -- Name: current_synset_words; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_synset_words ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, word_id INTEGER NOT NULL, nsg BOOLEAN, marks CHARACTER VARYING(255)[] DEFAULT '{}'::CHARACTER VARYING[], samples_ids INTEGER[] DEFAULT '{}'::INTEGER[], updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: synset_words; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE synset_words ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, word_id INTEGER NOT NULL, nsg BOOLEAN, marks CHARACTER VARYING(255)[] DEFAULT '{}'::CHARACTER VARYING[], samples_ids INTEGER[] DEFAULT '{}'::INTEGER[], synset_word_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: raw_synset_words; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE raw_synset_words ( id INTEGER NOT NULL, word_id INTEGER NOT NULL, nsg CHARACTER VARYING(255), marks CHARACTER VARYING(255)[] DEFAULT '{}'::CHARACTER VARYING[] NOT NULL, samples_ids INTEGER[] DEFAULT '{}'::INTEGER[] NOT NULL, author_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone NOT NULL, updated_at TIMESTAMP WITHOUT TIME zone NOT NULL );
Примеры словоупотреблений
-- -- Name: current_samples; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_samples ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, text text NOT NULL, SOURCE CHARACTER VARYING(255), uri CHARACTER VARYING(255), updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: samples; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE samples ( id INTEGER NOT NULL, author_id INTEGER, approver_id INTEGER, approved_at TIMESTAMP WITHOUT TIME zone, revision INTEGER DEFAULT 1 NOT NULL, text text NOT NULL, SOURCE CHARACTER VARYING(255), uri CHARACTER VARYING(255), sample_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone );
Пометы
-- -- Name: mark_categories; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE mark_categories ( id INTEGER NOT NULL, title CHARACTER VARYING(255) NOT NULL, created_at TIMESTAMP WITHOUT TIME zone NOT NULL, updated_at TIMESTAMP WITHOUT TIME zone NOT NULL ); -- -- Name: marks; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE marks ( id INTEGER NOT NULL, name CHARACTER VARYING(255) NOT NULL, description CHARACTER VARYING(255) NOT NULL, mark_category_id INTEGER NOT NULL, created_at TIMESTAMP WITHOUT TIME zone NOT NULL, updated_at TIMESTAMP WITHOUT TIME zone NOT NULL );
Отношения
-- -- Name: current_antonomy_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_antonomy_relations ( id INTEGER NOT NULL, synset1_id INTEGER NOT NULL, synset2_id INTEGER NOT NULL, word1_id INTEGER NOT NULL, word2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: antonomy_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE antonomy_relations ( id INTEGER NOT NULL, antonomy_relation_id INTEGER NOT NULL, synset1_id INTEGER NOT NULL, synset2_id INTEGER NOT NULL, word1_id INTEGER NOT NULL, word2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: current_interlinks; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_interlinks ( id INTEGER NOT NULL, synset_id INTEGER NOT NULL, pwn text NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: interlinks; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE interlinks ( id INTEGER NOT NULL, interlink_id INTEGER NOT NULL, synset_id INTEGER NOT NULL, pwn text NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: current_synset_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_synset_relations ( id INTEGER NOT NULL, synset1_id INTEGER NOT NULL, synset2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: synset_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE synset_relations ( id INTEGER NOT NULL, synset_relation_id INTEGER NOT NULL, synset1_id INTEGER NOT NULL, synset2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, created_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: current_word_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE current_word_relations ( id INTEGER NOT NULL, word1_id INTEGER NOT NULL, word2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, updated_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone ); -- -- Name: word_relations; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE word_relations ( id INTEGER NOT NULL, word_relation_id INTEGER NOT NULL, word1_id INTEGER NOT NULL, word2_id INTEGER NOT NULL, author_id INTEGER NOT NULL, revision INTEGER DEFAULT 1 NOT NULL, approver_id INTEGER NOT NULL, approved_at TIMESTAMP WITHOUT TIME zone, created_at TIMESTAMP WITHOUT TIME zone, deleted_at TIMESTAMP WITHOUT TIME zone );
Пользователи
-- -- Name: users; Type: TABLE; Schema: public; Owner: yarn; Tablespace: -- CREATE TABLE users ( id INTEGER NOT NULL, name CHARACTER VARYING(255) NOT NULL, provider CHARACTER VARYING(255), uid CHARACTER VARYING(255), created_at TIMESTAMP WITHOUT TIME zone NOT NULL, updated_at TIMESTAMP WITHOUT TIME zone NOT NULL );