Jazyki-Mira / langworld_db_data

Data files for Jazyki Mira (Languages of the World) database
Creative Commons Attribution 4.0 International
2 stars 1 forks source link

[COMPOUND] Add functionality to add/remove/move features with auto reordering of values in feature profiles #192

Open lemontree210 opened 4 months ago

lemontree210 commented 4 months ago
lemontree210 commented 4 months ago

Overview by @MariAnShum:

Общая постановка задачи:

Создать функционал, который актуализирует порядок следования признаков в рефератах.

Детали:

  1. Это может быть одна функция или несколько.
  2. Тот же функционал может добавлять и убирать признаки.
  3. Это должно работать одинаково хорошо для манипуляций внутри категории и между категориями.
  4. Этот же функционал обновляет айди значений у перемещенных признаков.
  5. Если порядок обновился в features, то он должен обновиться не только в рефератах, но в features_listed_values.csv. ~Вопрос: есть ли еще файлы, где нужно автоматически обновлять порядок?~
  6. Вопрос: какова вероятность, что может быть добавлена или образована новая категория? Нужно ли закладывать эту возможность сейчас?

Варианты реализации:

  1. Получение списка инструкций, что и куда следует переместить.
  2. Автоматическая актуализация рефератов с опорой на список features.

Актуальное решение: судя по всему, нужно начинать с варианта 1, а потом на его основе надстраивать вариант 2.

Атомарные задачи:

Сценарий 1 Сценарий 2 Сценарий 3 Сценарий 4 Сценарий 5
Однотипные действия выполняются сразу в рефератах и в features_listed_values. Сначала перестановка, потом обновление айди Сначала перестановка, потом обновление айди. Сначала все делается в рефератах, потом в features_listed_values Ориентирован на группировку операций в независимые методы добавления и удаления признаков. Сначала все делается в рефератах, потом в features_listed_values. Обновление айди целевого признака и значения (значений) выполняется в буфере обмена По замыслу аналогичен варианту 3, но обновление айди происходит не в буфере, а in situ Экспериментальный вариант, при котором сначала происходит обновление айди, а потом выстраивается нужный порядок. Выполняется сначала в рефератах, потом в features_listed_values. Ориентирован на реализацию плана Б в обход плана А, поэтому добавляет новые типы атомарных задач
1 Вырезать целевой признак (рефераты) Вырезать целевой признак (рефераты) Вырезать целевой признак (рефераты) Вырезать целевой признак (рефераты) Найти строку, в которой в реферате и features содержатся признаки с разными айди
2 Вырезать значения целевого признака (features_listed_values) Вставить целевой признак на целевую позицию Обновить айди нецелевых признаков Обновить айди нецелевых признаков Обновить айди целевого признака в реферате по файлу features
3 Вставить целевой признак на целевую позицию (рефераты) Обновить айди целевого признака Обновить айди значения нецелевых признаков Обновить айди значения нецелевых признаков Обновить айди значения целевого признака в реферате
4 Вставить значения целевого признака на целевую позицию (features_listed_values) Обновить айди значения целевого признака Обновить айди целевого признака Вставить целевой признак на целевую позицию Повторить шаги 1-3, пока все признаки и значения не получат актуальные айди
5 Обновить айди целевого признака (рефераты) Обновить айди нецелевых признаков Обновить айди значения целевого признака Обновить айди целевого признака Упорядочить признаки в реферате
6 Обновить айди целевого признака (features_listed_values) Обновить айди значения нецелевых признаков Вставить целевой признак на целевую позицию Обновить айди значения целевого признака Выполнить то же самое для остальных рефератов
7 Обновить айди значения целевого признака (рефераты) Вырезать значения целевого признака (features_listed_values) Обновить айди нецелевых признаков Обновить айди нецелевых признаков Найти строку, в которой в features и features_listed_values содержатся признак и значение такие, что признак значения имеет другой айди, чем признак в features. Этот признак в features_listed_values назовем целевым
8 Обновить айди значений целевого признака (features_listed_values) Вставить значения целевого признака на целевую позицию Обновить айди значения нецелевых признаков Обновить айди значения нецелевых признаков Обновить айди признака у всех значений целевого признака в features_listed_values
9 Обновить айди нецелевых признаков (рефераты) Обновить айди целевого признака Вырезать значения целевого признака (features_listed_values) Вырезать значения целевого признака (features_listed_values) Обновить айди значений целевого признака в features_listed_values
10 Обновить айди нецелевых признаков (features_listed_values) Обновить айди значений целевого признака Обновить айди нецелевых признаков Обновить айди нецелевых признаков Повторить шаги 1-3, пока все значения и их признаки не получат актуальные айди в features_listed_values
11 Обновить айди значений нецелевых признаков (рефераты) Обновить айди нецелевых признаков Обновить айди значения нецелевых признаков Обновить айди значения нецелевых признаков Упорядочить значения в features_listed_values
12 Обновить айди значений нецелевых признаков (features_listed_values) Обновить айди значения нецелевых признаков Обновить айди целевого признака Вставить значения целевого признака на целевую позицию
13 Обновить айди значений целевого признака Обновить айди целевого признака
14 Вставить значения целевого признака на целевую позицию Обновить айди значений целевого признака
15 Обновить айди нецелевых признаков Обновить айди нецелевых признаков
16 Обновить айди значения нецелевых признаков Обновить айди значения нецелевых признаков

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

К сценарию 1 остается вопрос: судя по всему, актуализация порядка будет проходить в каждом реферате отдельно, а не во всех рефератах вместе. Тогда, получается, группировка однотипных задач для реферата и features_listed_values теряет смысл?

Дополнительно для сценария 5 можно прописать функцию, которая при обработке первого реферата создает рецепт обновления. Он состоит из строк, в каждой из них три значения: исходная позиция целевого признака, новый айди целевого признака (автоматически распространяется и на значение), новая позиция целевого признака. Как представляется, такой рецепт обновления может упростить актуализацию остальных рефератов и feaures_listed_values, так как его можно будет выполнять с помощью простой функции на основе функции move_lines из модуля txt. У этого сценария есть недостаток — отсутствие основы для независимых методов удаления и добавления.

lemontree210 commented 4 months ago
6. Вопрос: какова вероятность, что может быть добавлена или образована новая категория? Нужно ли закладывать эту возможность сейчас?

Вероятность есть, но не в ближайшее время

lemontree210 commented 4 months ago

Варианты реализации:

1. Получение списка инструкций, что и куда следует переместить.

2. Автоматическая актуализация рефератов с опорой на список features.

Актуальное решение: судя по всему, нужно начинать с варианта 1, а потом на его основе надстраивать вариант 2.

Предлагаю наоборот: сначала сделать №2, а потом над ним надстроить функционал по добавлению/перемещению/удалению значений сразу во все файлы с помощью инструкций