YARN/Данные

Материал из NLPub
Перейти к: навигация, поиск
Описание схемы данных YARN
Warning.svg Автор: Дмитрий Усталов при поддержке РГНФ[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
);

Диаграмма связей

Ошибка создания миниатюры:

Примечания

  1. Исследование выполняется при финансовой поддержке РГНФ (проект № 13-04-12020 «Новый открытый электронный тезаурус русского языка»).