From 3151ed72d39e0720a2edc83ebd39f24955854882 Mon Sep 17 00:00:00 2001 From: Pavel Torbeev Date: Sun, 10 Sep 2023 00:58:49 +0300 Subject: [PATCH] feat: add metrics --- src/api/process/createProcess.ts | 1 - src/api/process/getText.ts | 6 +-- .../DefaultLayout/DefaultLayout.module.scss | 2 +- src/pages/home/HomePage.tsx | 12 ++--- src/pages/response/ResponsePage.tsx | 48 ++++++++++++------- .../response/components/TextItem/TextItem.tsx | 42 +++++++++++----- src/pages/text/TextPage.tsx | 32 +++++++++---- src/pages/text/utils/getTextFromDetailed.ts | 2 +- 8 files changed, 96 insertions(+), 49 deletions(-) diff --git a/src/api/process/createProcess.ts b/src/api/process/createProcess.ts index cc9f304..6a00e6f 100644 --- a/src/api/process/createProcess.ts +++ b/src/api/process/createProcess.ts @@ -16,7 +16,6 @@ export type CreateProcessResponse = { export const createProcess = (data: CreateProcessDTO): Promise => { const isForm = data.files?.length !== 0; - console.log(data); let inputData: any; if (isForm) { inputData = new FormData(); diff --git a/src/api/process/getText.ts b/src/api/process/getText.ts index af7db26..5cb7ac3 100644 --- a/src/api/process/getText.ts +++ b/src/api/process/getText.ts @@ -1,9 +1,9 @@ import { useQuery } from '@tanstack/react-query'; import { axios } from '../../lib/axios'; import { ExtractFnReturnType, QueryConfig } from '../../lib/react-query'; -import { ProcessDescriptor, ScoreType, TextDescriptor } from './types'; -import { PROCESS_API_URL, TEXT_API_URL, TEXT_PARAM } from './urlKeys'; -import { QUERY_KEY_PROCESSES, QUERY_KEY_TEXTS } from './queryKeys'; +import { ScoreType, TextDescriptor } from './types'; +import { TEXT_API_URL, TEXT_PARAM } from './urlKeys'; +import { QUERY_KEY_TEXTS } from './queryKeys'; export type GetTextResponse = TextDescriptor; diff --git a/src/pages/_layouts/DefaultLayout/DefaultLayout.module.scss b/src/pages/_layouts/DefaultLayout/DefaultLayout.module.scss index 96639d9..76efb11 100644 --- a/src/pages/_layouts/DefaultLayout/DefaultLayout.module.scss +++ b/src/pages/_layouts/DefaultLayout/DefaultLayout.module.scss @@ -15,7 +15,7 @@ .DefaultLayout__container { @include flex-col; - grid-column: 3 / span 8; + grid-column: 2 / span 10; @include tablet-down { grid-column: 1 / -1; diff --git a/src/pages/home/HomePage.tsx b/src/pages/home/HomePage.tsx index 7cbe0aa..e6c661d 100644 --- a/src/pages/home/HomePage.tsx +++ b/src/pages/home/HomePage.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; import { useDropzone } from 'react-dropzone'; import { useNavigate } from 'react-router-dom'; @@ -9,8 +9,7 @@ import { ETextVariants, Text } from '../../components/Text'; import { Button, ButtonSize, ButtonVariant } from '../../components/Button'; import { Divider } from '../../components/Divider'; import { Textarea } from '../../components/Textarea'; -import { useCreateProcess } from '../../api/process'; -import { useProcess } from '../../api/process/getProcess'; +import { useCreateProcess, useProcess } from '../../api/process'; import { useSingleTimeout } from '../../hooks/useSingleTimeout'; import { Upload } from '../../components/Upload'; import { Attachment } from '../../components/Attachment'; @@ -24,7 +23,8 @@ export type FormFields = { files: File[]; }; -export const PROCESS_POLLING_MS = 500; +// 3207 +export const PROCESS_POLLING_MS = 2000; export const HomePage: ReactFCC = () => { const { @@ -136,8 +136,8 @@ export const HomePage: ReactFCC = () => { - Позволяет оценить кредитный рейтинг компании на основе пресс-релиза с выделением в тексте меток по различным - метрикам. + Позволяет оценить кредитный рейтинг компании на основе пресс-релиза с выделением в тексте ключевых фраз с + использованием различных методов.
diff --git a/src/pages/response/ResponsePage.tsx b/src/pages/response/ResponsePage.tsx index 6877662..41dd9d9 100644 --- a/src/pages/response/ResponsePage.tsx +++ b/src/pages/response/ResponsePage.tsx @@ -3,12 +3,11 @@ import { useNavigate } from 'react-router-dom'; import { Heading, HeadingSize } from '../../components/Heading'; import { Link } from '../../components/Link'; import { getPercentageColor } from '../../utils/getPercentageColor'; -import { EMDASH } from '../../utils/chars'; import { ModalBody, useModal, ModalContainer } from '../../components/Modal'; import { useIsMobile } from '../../hooks/useIsMobile'; import { useUrlParam } from '../../hooks/useUrlParam'; import { PathBuilder, RESPONSE_PAGE_PARAM } from '../../app/routes'; -import { useProcess } from '../../api/process/getProcess'; +import { useProcess } from '../../api/process'; import { TextItem } from './components'; import s from './ResponsePage.module.scss'; @@ -67,9 +66,9 @@ export const ResponsePage: FC = () => { ID Имя - М. н-с. - М. стат. - М. c. + Нейросетевой метод + Статистический метод + Метод схожести {/*Рез.*/} Крат. сод. @@ -81,23 +80,38 @@ export const ResponsePage: FC = () => { {text.id} {text.file_name.length > 10 ? `${text.file_name.slice(0, 10)}...` : text.file_name} - {text.score.bert.answer} - {/*| 0.99*/} + {text.score.bert.answer}{' '} + {text.score.bert.metric && ( + <> + | Точность{' '} + + {text.score.bert.metric.toFixed(2)} + + + )} - {text.score.f.answer} - {/*| 0.99*/} + {text.score.f.answer}{' '} + {text.score.f.metric && ( + <> + | Точность{' '} + + {text.score.f.metric.toFixed(2)} + + + )} - {text.score.nearest.answer} - {/*| 0.99*/} + {text.score.nearest.answer}{' '} + {text.score.nearest.metric && ( + <> + | Точность{' '} + + {text.score.nearest.metric.toFixed(2)} + + + )} - {/**/} - {/* AA+ | 0.95*/} - {/**/} - {/**/} - {/* AA+ | 0.95*/} - {/**/} = (props) => {
- М. н-с: {text.score.bert.answer} - {/*| 0.99*/} - {' '} + Нейросетевой метод: {text.score.bert.answer}{' '} + {text.score.bert.metric && ( + <> + | Точность{' '} + + {text.score.bert.metric.toFixed(2)} + + + )} +
- М. стат: {text.score.f.answer} - {/*| 0.99*/} - {' '} + Статистический метод: {text.score.f.answer}{' '} + {text.score.f.metric && ( + <> + | Точность{' '} + {text.score.f.metric.toFixed(2)} + + )} +
- {/*
*/} - {/* */} - {/* М. п: AA+ | 0.63*/} - {/* {' '}*/} - {/*
*/} +
+ + Метод схожести: {text.score.nearest.answer}{' '} + {text.score.nearest.metric && ( + <> + | Точность{' '} + + {text.score.nearest.metric.toFixed(2)} + + + )} + +
diff --git a/src/pages/text/TextPage.tsx b/src/pages/text/TextPage.tsx index dcab7f1..6e9a78d 100644 --- a/src/pages/text/TextPage.tsx +++ b/src/pages/text/TextPage.tsx @@ -20,7 +20,7 @@ export type TextFields = { type: ScoreType; }; -export const TEXT_REFETCH_MS = 500; +export const TEXT_REFETCH_MS = 2000; export const TextPage: FC = () => { const textId = useUrlParam(TEXT_PAGE_PARAM, { parser: parseInt }); @@ -167,32 +167,46 @@ export const TextPage: FC = () => { нейросетевому {' '} методу: {textEntity.score.bert.answer} - {/*| Accuracy: 0.95*/} + {textEntity.score.bert.metric && ( + <> + | Точность:{' '} + + {textEntity.score.bert.metric.toFixed(2)} + + + )}{' '} Результат по{' '} статистическому {' '} методу: {textEntity.score.f.answer} - {/*| Accuracy: 0.71*/} + {textEntity.score.f.metric && ( + <> + | Точность:{' '} + + {textEntity.score.f.metric.toFixed(2)} + + + )} Результат по методу{' '} - + схожести : {textEntity.score.nearest.answer} {textEntity.score.nearest.metric && ( <> | Точность:{' '} - - {(textEntity.score.nearest.metric / 100).toFixed(2)} + + {textEntity.score.nearest.metric.toFixed(2)} )} @@ -269,8 +283,8 @@ export const TextPage: FC = () => {

Точность{' '} - - {(activeDetailed.features[1] / 100).toFixed(2)} + + {activeDetailed.features[1].toFixed(2)}

{activeDetailed.features[2].map((text, index) => ( diff --git a/src/pages/text/utils/getTextFromDetailed.ts b/src/pages/text/utils/getTextFromDetailed.ts index 82b9283..c437b07 100644 --- a/src/pages/text/utils/getTextFromDetailed.ts +++ b/src/pages/text/utils/getTextFromDetailed.ts @@ -6,7 +6,7 @@ export const getTextFromDetailed = (detailed: DetailDescriptor[] = []) => { detailed.forEach((item, index) => { const [_, metric] = item.features; - const color = getColorFromValue(metric / 100); + const color = getColorFromValue(metric); html += `

${item.text}

`; });