From 070ab1823188d140a9a8718b80846f20f38d321b Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:32:35 +0300 Subject: [PATCH] M: Improve typification labeling --- rsconcept/frontend/src/components/icons.tsx | 2 +- .../frontend/src/features/rsform/models/rslang-api.ts | 7 +++++-- .../pages/rsform-page/editor-term-graph/graph/tg-node.tsx | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/rsconcept/frontend/src/components/icons.tsx b/rsconcept/frontend/src/components/icons.tsx index 7839a4f7..c833233d 100644 --- a/rsconcept/frontend/src/components/icons.tsx +++ b/rsconcept/frontend/src/components/icons.tsx @@ -105,7 +105,7 @@ export { LuSubscript as IconAlias } from 'react-icons/lu'; export { TbMathFunction as IconFormula } from 'react-icons/tb'; export { BiFontFamily as IconText } from 'react-icons/bi'; export { BiFont as IconTextOff } from 'react-icons/bi'; -export { TbCar4Wd as IconTypeGraph } from 'react-icons/tb'; +export { TbCircleLetterM as IconTypeGraph } from 'react-icons/tb'; export { RiTreeLine as IconTree } from 'react-icons/ri'; export { FaRegKeyboard as IconControls } from 'react-icons/fa6'; export { RiLockLine as IconImmutable } from 'react-icons/ri'; diff --git a/rsconcept/frontend/src/features/rsform/models/rslang-api.ts b/rsconcept/frontend/src/features/rsform/models/rslang-api.ts index 4e6f6623..00926d75 100644 --- a/rsconcept/frontend/src/features/rsform/models/rslang-api.ts +++ b/rsconcept/frontend/src/features/rsform/models/rslang-api.ts @@ -8,6 +8,7 @@ import { cursorNode } from '@/utils/codemirror'; import { PARAMETER } from '@/utils/constants'; import { CstType, type IRSErrorDescription, type RSErrorType } from '../backend/types'; +import { labelCstTypification } from '../labels'; import { type IRSForm } from './rsform'; import { type AliasMapping, type IArgumentValue, RSErrorClass, type SyntaxTree } from './rslang'; @@ -241,7 +242,7 @@ export function transformAST(tree: Tree): SyntaxTree { export function generatePrompt(schema: IRSForm): string { const intro = - 'Концептуальная схема — это формализованная модель предметной области, выраженная с помощью языка родов структур, основанного на аппарате формальной логики и теории множеств, и дополненная естественно-языковыми пояснениями. Она представляет собой систему взаимосвязанных определений, где каждое понятие или утверждение задаётся в строгом формате Обозначение - "Типизация" - "Термин" - "Определение в языке родов структур" - "Определение в естественном языке" - "Конвенция или комментарий".\nОбозначение — уникальный идентификатор понятия (например, X1, S3, F14).\nТипизация — структура элементов множества, моделирующего данное понятие (например, ℬ(X1) для подмножества индивидов или ℬ(X1×X1) для бинарных отношений).\nТермин — название понятия в естественном языке.\nКонвенция описывает неопределяемые понятия предметным языком, включая уточнения, ограничения или примеры, включая ссылки на внешние данные (например, документы).\n------------\nДалее приведена концептуальная схема, описывающая некоторую предметную область.\n'; + 'Концептуальная схема — это формализованная модель предметной области, выраженная с помощью языка родов структур, основанного на аппарате формальной логики и теории множеств, и дополненная естественно-языковыми пояснениями. Она представляет собой систему взаимосвязанных определений, где каждое понятие или утверждение задаётся в строгом формате Обозначение - "Типизация" - "Термин" - "Определение в языке родов структур" - "Определение в естественном языке" - "Конвенция или комментарий".\nОбозначение — уникальный идентификатор понятия (например, X1, S3, F14).\nТипизация — структура элементов множества, моделирующего данное понятие (например, ℬ(X1) для подмножества индивидов или ℬ(X1×X1) для бинарных отношений или ℬ(X1) 🠔 [ℬ(X1×ℬ(X1))] — для терм-функции).\nТермин — название понятия в естественном языке.\nКонвенция описывает неопределяемые понятия предметным языком, включая уточнения, ограничения или примеры, включая ссылки на внешние данные (например, документы).\nВ формальном выражении используется ряд формальных конструкций.\npr1(α) — малая проекция, возвращающая компонент кортежа, соответствующий индексу.\nPr2,1(S1) — большая проекция, которая превращает множество кортежей в новую структуру в соответствии с набором индексов. В данном примере элементы S1 превращаются в пары, где на 1 месте стоит второй компонент, а на 2 месте — первый.\nFi1[S1](S2) — фильтр, который по заданным в квадратных скобках параметрам отбирает из множества кортежей в круглых скобках подмножество такое, что соответствующие заданным индексам компоненты кортежей из S2 включены в соответствующий параметр в квадратных скобках.\nD{ξ∈X1 | P1[ξ]} — декларативное объявление, которое позволяет задать область определения (слева от вертикальной черты) и логическое выражение (справа от черты), которое используется для отбора подмножества из области определения.\nI{(σ, γ) | σ:∈X1; γ:=F1[σ]; P1[σ, γ]} — императивное определения, задаваемое вычисляемым выражением элемента (слева от черты) и последовательностью действия (справа от черты), позволяющих сформировать необходимые для вычисления выражения переменные. Действия разделены точкой с запятой и представлены 3 видами: перебор элементов множества через :∈, вычисление выражения и присвоения значения переменной через := и логического блока, проверяющего некоторое условие, аналогично декларативному определению.\ndebool — преобразует одноэлементное множество в элемент (например, {x} → x)\nR{ξ:=D1 | F1[ξ]≠∅ | ξ∪F1[ξ]} — рекурсивное (циклическое) определение, состоящее из трех (иногда двух) блоков, разделенных вертикальной чертой. Первый блок — определение начального значения. Второй блок — условие продолжения цикла. Третий блок — следующее значение выражение вычисленное через текущее значение. Второй блок может быть пропущен, поскольку по умолчанию цикл останавливается если следующее значение равно текущему.\n------------\nДалее приведена концептуальная схема, описывающая некоторую предметную область.\n'; const outro = '\n------\nПри ответе на следующий вопрос используй представленные в концептуальной схеме понятия и определения.\n'; @@ -249,7 +250,9 @@ export function generatePrompt(schema: IRSForm): string { body += `[${schema.alias}] Описание: "${schema.description}"\n\n`; body += 'Понятия:\n'; schema.items.forEach(item => { - body += `${item.alias} - "${item.parse.typification}" - "${item.term_resolved}" - "${item.definition_formal}" - "${item.definition_resolved}" - "${item.convention}"\n`; + body += `${item.alias} - "${labelCstTypification(item)}" - "${item.term_resolved}" - "${ + item.definition_formal + }" - "${item.definition_resolved}" - "${item.convention}"\n`; }); return `${intro} ${body} ${outro}`; } diff --git a/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-term-graph/graph/tg-node.tsx b/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-term-graph/graph/tg-node.tsx index ae8fe314..1d68cb34 100644 --- a/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-term-graph/graph/tg-node.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-term-graph/graph/tg-node.tsx @@ -3,6 +3,8 @@ import { Handle, Position } from 'reactflow'; import clsx from 'clsx'; +import { labelCstTypification } from '@/features/rsform/labels'; + import { APP_COLORS } from '@/styling/colors'; import { globalIDs } from '@/utils/constants'; @@ -95,5 +97,5 @@ export function TGNode(node: TGNodeInternal) { // ====== INTERNAL ====== function describeCstNode(cst: IConstituenta) { - return `${cst.alias}: ${cst.term_resolved}
Типизация: ${cst.parse.typification}`; + return `${cst.alias}: ${cst.term_resolved}
Типизация: ${labelCstTypification(cst)}`; }