YARN/Данные

Материал из NLPub
Перейти к: навигация, поиск
Описание схемы данных YARN
Warning.svg Автор: Дмитрий Усталов при поддержке РГНФ[1].

В проекте YARN тезаурус представлен в виде реляционной базы данных. Имеется описание схемы данных в формате Ruby on Rails: https://github.com/russianwordnet/yarn/blob/master/db/schema.rb.

Основные сущности

Существует четыре основных сущности: слово, синсет, отношение между синсетами, отношение между словами. Основное внимание на первом этапе разработки проекта уделяется работе со словами и синсетами.

Понятие «слово» включает в себя:

  • лексему;
  • присвоенную грамматическую категорию по словарю А. А. Зализняка;
  • позицию ударной гласной буквы;
  • список URI источников данного лексемы.

Понятие «синсет» включает в себя:

  • множество определений («смыслов»);
  • множество словоупотреблений (не путать с понятием слова).

Понятие «определение» включает в себя:

  • текстовую запись определения;
  • название источника данного определения;
  • URI источника данного определения.

Понятие «словоупотребление» включает в себя:

  • ссылку на существующее слово;
  • помету о нестандартной грамматике в виде флага;
  • список иных помет;
  • множество примеров словоупотребления.

Понятие «пример словоупотребления» включает в себя:

  • текстовую запись словоупотребления;
  • название источника данного словоупотребления;
  • URI источника данного словоупотребления.

Допущения и соглашения

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

  • поддержка версионности и возможность быстрого переключения между версиями объектов;
  • возможность модерирования записей и их одобрения модераторами ресурса.

Внимание! Таблицы с лингвистическими данными имеют строгие требования к именованию:

  • current_words — текущие версии слов, которые видят пользователи в настоящий момент;
  • words — предыдущие версии слов из таблицы current_words.

Для обеспечения версионности связей между синсетами и определениями, синсетами и словоупотреблениями, словоупотреблениями и примерами, использован встроенный в PostgreSQL тип данных ARRAY. Поля, хранящие списки идентификаторов соответствующих записей, заканчиваются на _ids. Например: samples_ids.

Формат данных детально описан в репозитории проекта на GitHub: https://github.com/russianwordnet/yarn-formats.

Схема данных

Слова

--
-- Name: current_words; Type: TABLE; Schema: public; Owner: -; 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[],
    frequency double precision DEFAULT 0.0 NOT NULL
);

--
-- Name: words; Type: TABLE; Schema: public; Owner: -; 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[],
    frequency double precision DEFAULT 0.0 NOT NULL
);

Синсеты

--
-- Name: current_synsets; Type: TABLE; Schema: public; Owner: -; 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[],
    default_definition_id integer,
    default_synset_word_id integer
);

--
-- Name: synsets; Type: TABLE; Schema: public; Owner: -; 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[],
    default_definition_id integer,
    default_synset_word_id integer
);

Определения

--
-- Name: current_definitions; Type: TABLE; Schema: public; Owner: -; 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 text,
    uri character varying(255),
    updated_at timestamp without time zone,
    deleted_at timestamp without time zone
);

--
-- Name: definitions; Type: TABLE; Schema: public; Owner: -; 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 text,
    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: -; 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,
    examples_ids integer[] DEFAULT '{}'::integer[],
    updated_at timestamp without time zone,
    deleted_at timestamp without time zone,
    marks_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
    definitions_ids integer[] DEFAULT '{}'::integer[]
);

--
-- Name: synset_words; Type: TABLE; Schema: public; Owner: -; 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,
    examples_ids integer[] DEFAULT '{}'::integer[],
    synset_word_id integer NOT NULL,
    created_at timestamp without time zone,
    deleted_at timestamp without time zone,
    marks_ids integer[] DEFAULT '{}'::integer[] NOT NULL,
    definitions_ids integer[] DEFAULT '{}'::integer[]
);

Примеры словоупотреблений

--
-- Name: current_examples; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE current_examples (
    id integer NOT NULL,
    text text NOT NULL,
    source text,
    uri character varying(255),
    author_id integer NOT NULL,
    updated_at timestamp without time zone NOT NULL,
    approver_id integer,
    approved_at timestamp without time zone,
    revision integer DEFAULT 1 NOT NULL,
    deleted_at timestamp without time zone
);

--
-- Name: examples; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE examples (
    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 text,
    uri character varying(255),
    example_id integer NOT NULL,
    created_at timestamp without time zone,
    deleted_at timestamp without time zone
);

Пометы

--
-- Name: mark_categories; Type: TABLE; Schema: public; Owner: -; 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: -; 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_synset_interlinks; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE current_synset_interlinks (
    id integer NOT NULL,
    synset_id integer NOT NULL,
    source text NOT NULL,
    foreign_id text,
    author_id integer NOT NULL,
    revision integer DEFAULT 1 NOT NULL,
    approver_id integer,
    approved_at timestamp without time zone,
    updated_at timestamp without time zone,
    deleted_at timestamp without time zone
);

--
-- Name: synset_interlinks; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE synset_interlinks (
    id integer NOT NULL,
    synset_interlink_id integer NOT NULL,
    synset_id integer NOT NULL,
    source text NOT NULL,
    foreign_id text,
    author_id integer NOT NULL,
    revision integer DEFAULT 1 NOT NULL,
    approver_id integer,
    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: -; 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: -; 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: users; Type: TABLE; Schema: public; Owner: -; 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,
    role character varying(255),
    sash_id integer,
    level integer DEFAULT 0
);

--
-- Name: sashes; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE sashes (
    id integer NOT NULL,
    created_at timestamp without time zone,
    updated_at timestamp without time zone
);

--
-- Name: badges_sashes; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE badges_sashes (
    id integer NOT NULL,
    badge_id integer,
    sash_id integer,
    notified_user boolean DEFAULT false,
    created_at timestamp without time zone
);

--
-- Name: merit_scores; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE merit_scores (
    id integer NOT NULL,
    sash_id integer,
    category character varying(255) DEFAULT 'default'::character varying
);

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

Диаграмма устарела, но приводится в образовательных целях.

YarnDatabaseSchema.svg

Примечания

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