dev-QQq
qinzhenpen 2 years ago
parent eb7d300d54
commit 25b8c2a2a3

Binary file not shown.

@ -2,7 +2,7 @@
* @Author: qinzhenpen qzp1807@126.com * @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 10:14:59 * @Date: 2024-08-16 10:14:59
* @LastEditors: qinzhenpen qzp1807@126.com * @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-19 15:07:27 * @LastEditTime: 2024-08-22 11:40:05
* @FilePath: \vue3\src\api\marketing-algorithm.js * @FilePath: \vue3\src\api\marketing-algorithm.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
@ -73,3 +73,11 @@ export function getMarketingAlgorithmSentiment(data) {
data, data,
}); });
} }
// 情感倾向分析
export function getMarketingAlgorithmSentimentAnalysis(data) {
return request({
url: "/api/python/sentimentAnaly",
method: "POST",
data,
});
}

@ -7,6 +7,14 @@ export function getUserTableData(data) {
params: data, params: data,
}); });
} }
// 查询用户数据基本信息
export function getUserTableInfo(params) {
return request({
url: "/api/userprofile/getBaseInfo",
method: "get",
params,
});
}
//数据下载-RFM分析 //数据下载-RFM分析
export function downloadDataByRFM(data) { export function downloadDataByRFM(data) {
return request({ return request({

@ -135,7 +135,10 @@ aside {
.pagination-container { .pagination-container {
margin-top: 30px; margin-top: 30px;
background-color: transparent !important; background-color: transparent !important;
.el-pagination__total,.el-pagination__goto,.el-pagination__classifier{
.el-pagination__total,
.el-pagination__goto,
.el-pagination__classifier {
color: #ffffff !important; color: #ffffff !important;
} }
} }
@ -211,6 +214,7 @@ aside {
.el-button--large.is-round { .el-button--large.is-round {
padding: 12px 20px 12px 40px !important; padding: 12px 20px 12px 40px !important;
} }
.el-button { .el-button {
width: 89px; width: 89px;
height: 31px; height: 31px;
@ -223,16 +227,19 @@ aside {
.app-container2 { .app-container2 {
margin: 10px; margin: 10px;
box-shadow: 0px 0px 13px 0px #0452C6; // box-shadow: 0px 0px 13px 0px #0452C6;
border-radius: 10px; border-radius: 10px;
padding: 25px 25px 10px 25px; // padding: 25px 25px 10px 25px;
} }
.dialogClass { .dialogClass {
background: url('@/assets/images/弹框.png') !important; background: url('@/assets/images/弹框.png') !important;
background-size: 100% 100% !important; background-size: 100% 100% !important;
.el-dialog__header { .el-dialog__header {
padding: 5px 0px; padding: 5px 0px;
margin-right: 5px !important; margin-right: 5px !important;
.gbImg { .gbImg {
cursor: pointer; cursor: pointer;
width: 51px; width: 51px;
@ -240,19 +247,23 @@ aside {
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
.xtImg { .xtImg {
margin-left: 18px; margin-left: 18px;
width: 530px; width: 530px;
} }
} }
.my-header { .my-header {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
gap: 16px; gap: 16px;
text-align: center; text-align: center;
span { span {
color: #FFFFFF; color: #FFFFFF;
padding: 38px 20px 0; padding: 38px 20px 0;
} }
} }

@ -8,6 +8,7 @@ const useAlgorithmStore = defineStore("algorithm", {
tableData: [], tableData: [],
tableKey:[], tableKey:[],
userDataLabel:["用户属性表", "用户登录活跃表", "用户消费能力表", "用户行为表", "用户评论表"], //用户数据标签 userDataLabel:["用户属性表", "用户登录活跃表", "用户消费能力表", "用户行为表", "用户评论表"], //用户数据标签
userDataLabel2:["用户属性表", "用户登录活跃表", "用户消费能力表", "用户行为表", "用户评论表"],
indexLibrary: [], indexLibrary: [],
analysisData: [], analysisData: [],
}), }),

@ -1,95 +1,102 @@
import axios from 'axios' import axios from "axios";
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus' import { ElNotification, ElMessageBox, ElMessage, ElLoading } from "element-plus";
import { getToken } from '@/utils/auth' import { getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import { tansParams, blobValidate } from '@/utils/ruoyi' import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache' import cache from "@/plugins/cache";
import { saveAs } from 'file-saver' import { saveAs } from "file-saver";
import useUserStore from '@/store/modules/user' import useUserStore from "@/store/modules/user";
let downloadLoadingInstance; let downloadLoadingInstance;
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = { show: false }; export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分 // axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: import.meta.env.VITE_APP_BASE_API, // baseURL: import.meta.env.VITE_APP_BASE_API,
// baseURL:'http://118.31.7.2:9868/', // baseURL: "http://118.31.7.2:9868/",
baseURL:'http://192.168.2.28:9868/', baseURL: "http://192.168.2.4:9868/",
// 超时 // 超时
timeout: 100000 timeout: 100000,
}) });
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
(config) => {
// 是否需要设置 token // 是否需要设置 token
const isToken = (config.headers || {}).isToken === false const isToken = (config.headers || {}).isToken === false;
// 是否需要防止数据重复提交 // 是否需要防止数据重复提交
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
if (getToken() && !isToken) { if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
} }
// get请求映射params参数 // get请求映射params参数
if (config.method === 'get' && config.params) { if (config.method === "get" && config.params) {
let url = config.url + '?' + tansParams(config.params); let url = config.url + "?" + tansParams(config.params);
url = url.slice(0, -1); url = url.slice(0, -1);
config.params = {}; config.params = {};
config.url = url; config.url = url;
} }
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { if (!isRepeatSubmit && (config.method === "post" || config.method === "put")) {
const requestObj = { const requestObj = {
url: config.url, url: config.url,
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, data: typeof config.data === "object" ? JSON.stringify(config.data) : config.data,
time: new Date().getTime() time: new Date().getTime(),
};
const sessionObj = cache.session.getJSON("sessionObj");
} }
const sessionObj = cache.session.getJSON('sessionObj') return config;
},
(error) => {
console.log(error);
Promise.reject(error);
} }
return config );
}, error => {
console.log(error)
Promise.reject(error)
})
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// console.log(code); // console.log(code);
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回 // 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { if (res.request.responseType === "blob" || res.request.responseType === "arraybuffer") {
return res.data return res.data;
} }
if (code === 401) { if (code === 401) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { ElMessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录", "系统提示", { confirmButtonText: "重新登录", cancelButtonText: "取消", type: "warning" })
.then(() => {
isRelogin.show = false; isRelogin.show = false;
useUserStore().logOut().then(() => { useUserStore()
location.href = '/index'; .logOut()
.then(() => {
location.href = "/index";
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} }
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) { } else if (code === 500) {
ElMessage({ message: msg, type: 'error' }) ElMessage({ message: msg, type: "error" });
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code === 601) { } else if (code === 601) {
ElMessage({ message: msg, type: 'warning' }) ElMessage({ message: msg, type: "warning" });
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code !== 200) { } else if (code !== 200) {
ElNotification.error({ title: msg }) ElNotification.error({ title: msg });
return Promise.reject('error') return Promise.reject("error");
} else { } else {
return Promise.resolve(res.data) return Promise.resolve(res.data);
} }
}, },
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let { message } = error; let { message } = error;
if (message == "Network Error") { if (message == "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
@ -97,50 +104,61 @@ service.interceptors.response.use(res => {
message = "系统接口请求超时"; message = "系统接口请求超时";
} else if (message.includes("Request failed with status code")) { } else if (message.includes("Request failed with status code")) {
if (message.includes("401")) { if (message.includes("401")) {
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { ElMessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录", "系统提示", { confirmButtonText: "重新登录", cancelButtonText: "取消", type: "warning" })
.then(() => {
isRelogin.show = true; isRelogin.show = true;
useUserStore().logOut().then(() => { useUserStore()
location.href = '/login'; .logOut()
.then(() => {
location.href = "/login";
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} else if (message.includes("code 400")) { } else if (message.includes("code 400")) {
// ElNotification.error({ title: error.response.data }) // ElNotification.error({ title: error.response.data })
ElMessage({ message: error.response.data.msg, type: 'error' }) ElMessage({ message: error.response.data.msg, type: "error" });
} }
message = "系统接口" + message.substr(message.length - 3) + "异常"; message = "系统接口" + message.substr(message.length - 3) + "异常";
} }
// ElMessage({ message: message, type: 'error', duration: 5 * 1000 }) // ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
return Promise.reject(error) return Promise.reject(error);
} }
) );
// 通用下载方法 // 通用下载方法
export function download(url, params, filename, config) { export function download(url, params, filename, config) {
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", }) downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)" });
return service.post(url, params, { return service
transformRequest: [(params) => { return tansParams(params) }], .post(url, params, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequest: [
responseType: 'blob', (params) => {
...config return tansParams(params);
}).then(async (data) => { },
],
headers: { "Content-Type": "application/x-www-form-urlencoded" },
responseType: "blob",
...config,
})
.then(async (data) => {
const isBlob = blobValidate(data); const isBlob = blobValidate(data);
if (isBlob) { if (isBlob) {
const blob = new Blob([data]) const blob = new Blob([data]);
saveAs(blob, filename) saveAs(blob, filename);
} else { } else {
const resText = await data.text(); const resText = await data.text();
const rspObj = JSON.parse(resText); const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
ElMessage.error(errMsg); ElMessage.error(errMsg);
} }
downloadLoadingInstance.close(); downloadLoadingInstance.close();
}).catch((r) => {
console.error(r)
ElMessage.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close();
}) })
.catch((r) => {
console.error(r);
ElMessage.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
} }
export default service export default service;

@ -1,20 +1,7 @@
<template> <template>
<div> <div>
<el-dialog <el-dialog :title="title" style="width: 1308px; height: 838px" custom-class="dialog" v-model="props.showModel" :before-close="close">
:title="title" <div class="diaMain" style="margin-top: -35px; padding: 10px; padding-left: 20px">
style="width: 1308px; height: 838px"
custom-class="dialog"
v-model="props.showModel"
:before-close="close"
>
<div
class="diaMain"
style="
margin-top: -35px;
padding: 10px;
padding-left: 20px;
"
>
<el-scrollbar height="730px"> <el-scrollbar height="730px">
<slot name="content" class="main"></slot> <slot name="content" class="main"></slot>
</el-scrollbar> </el-scrollbar>
@ -61,9 +48,6 @@ const submit = () => {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
</style>
<style lang="scss">
.diaMain { .diaMain {
img { img {
max-height: 1200px; max-height: 1200px;
@ -103,10 +87,13 @@ const submit = () => {
text-align: center; text-align: center;
} }
.tj { .tj {
color: #FFFFFF; color: #ffffff;
} }
.cxks { .cxks {
background: url('@/assets/images/szjj/重新开始.png') no-repeat; background: url("@/assets/images/szjj/重新开始.png") no-repeat;
} }
} }
p {
// color: #1d2528 !important;
}
</style> </style>

@ -2,30 +2,36 @@
<div class="app-container2"> <div class="app-container2">
<div class="Naturallanguageprocessing"> <div class="Naturallanguageprocessing">
<div class="left"> <div class="left">
<el-scrollbar height="620px" style="height: 93%">
<el-scrollbar height="620px" style="height: 93%;">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div class="TaskBackground"> <div class="TaskBackground">
<span style="color:#000000;">任务背景</span> <span style="color: #000000">任务背景</span>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<div class="gdialog"> <div class="gdialog">
<p style="color:#FFFFFF !important"> <p style="color: #ffffff !important">
hatGPT突然火爆小张也去了解了ChatGPT发现ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具使用了Transformer神经网络架构也是GPT-3.5架构这是一种用于处理序列数据的模型拥有语言理解和文本生成能力尤其是它会通过连接大量的语料库来训练模型这些语料库包含了真实世界中的对话使得ChatGPT具备上知天文下知地理还能根据聊天的上下文进行互动的能力做到与真正人类几乎无异的聊天场景进行交流ChatGPT不单是聊天机器人还能进行撰写邮件视频脚本文案翻译代码等任务如此强大的工具背后是什么原理呢让我们一起来看一下吧<br/><br/> hatGPT突然火爆小张也去了解了ChatGPT发现ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具使用了Transformer神经网络架构也是GPT-3.5架构这是一种用于处理序列数据的模型拥有语言理解和文本生成能力尤其是它会通过连接大量的语料库来训练模型这些语料库包含了真实世界中的对话使得ChatGPT具备上知天文下知地理还能根据聊天的上下文进行互动的能力做到与真正人类几乎无异的聊天场景进行交流ChatGPT不单是聊天机器人还能进行撰写邮件视频脚本文案翻译代码等任务如此强大的工具背后是什么原理呢让我们一起来看一下吧
<br />
<br />
ChatGPT的核心是自然语言处理接下来我们了解下自然语言处理的过程吧 ChatGPT的核心是自然语言处理接下来我们了解下自然语言处理的过程吧
</p> </p>
<div class="step"> <div class="step">
<div class="step-item"> <div class="step-item">
<span>步骤一</span> <span>步骤一</span>
</div> </div>
<span>文本分词</span><br/> <span>文本分词</span>
<br />
</div> </div>
<p style="color:#FFFFFF !important">中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个个单独的词简单的讲中文分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记<br/> <p style="color: #ffffff !important">
中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个个单独的词简单的讲中文分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记
<br />
请对下面两句话进行分词分词结果请去掉标点符号<br/></p> 请对下面两句话进行分词分词结果请去掉标点符号
<p style="color:#FFFFFF !important">这个门把手坏了请你来修一下</p> <br />
</p>
<p style="color: #ffffff !important">这个门把手坏了请你来修一下</p>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-input v-model.trim="text1.input1" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" /> <el-input v-model.trim="text1.input1" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" />
@ -35,10 +41,9 @@
<el-input v-model.trim="text1.input5" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" /> <el-input v-model.trim="text1.input5" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" />
<el-input v-model.trim="text1.input6" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" /> <el-input v-model.trim="text1.input6" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" />
<el-input v-model.trim="text1.input7" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" /> <el-input v-model.trim="text1.input7" style="width: 160px; margin-right: 15px" @change="textChanged(text1, 1)" />
</el-col> </el-col>
</el-row> </el-row>
<p style="color:#FFFFFF !important">快把手拿开这里危险不能摸</p> <p style="color: #ffffff !important">快把手拿开这里危险不能摸</p>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-input v-model.trim="text2.input1" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" /> <el-input v-model.trim="text2.input1" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" />
@ -49,10 +54,9 @@
<el-input v-model.trim="text2.input6" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" /> <el-input v-model.trim="text2.input6" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" />
<el-input v-model.trim="text2.input7" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" /> <el-input v-model.trim="text2.input7" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" />
<el-input v-model.trim="text2.input8" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" /> <el-input v-model.trim="text2.input8" style="width: 147px; margin-right: 5px" @change="textChanged(text2, 2)" />
</el-col> </el-col>
</el-row> </el-row>
<p style="color:#FFFFFF !important">请问上面两句话中把手有何区别计算机是如何识别两句话中把手的不同含义的</p> <p style="color: #ffffff !important">请问上面两句话中把手有何区别计算机是如何识别两句话中把手的不同含义的</p>
<div class="answer"> <div class="answer">
<!-- <span v-if="item.correctAnswer!==null& item.studentAnswer!==item.correctAnswer">:{{item.correctAnswer}}</span> --> <!-- <span v-if="item.correctAnswer!==null& item.studentAnswer!==item.correctAnswer">:{{item.correctAnswer}}</span> -->
<p><el-checkbox v-model="answer.studentAnswer" label="A" size="large" @change="answerChanged(answer, '1')">A.</el-checkbox></p> <p><el-checkbox v-model="answer.studentAnswer" label="A" size="large" @change="answerChanged(answer, '1')">A.</el-checkbox></p>
@ -65,10 +69,26 @@
<div class="step-item"> <div class="step-item">
<span>步骤二</span> <span>步骤二</span>
</div> </div>
<span>词性标注</span><br/> <span>词性标注</span>
<br />
</div> </div>
<p style="color:#FFFFFF !important">根据上一步文本分词相关知识我们知道中文中同样一个词在不同的句子不同的上下文环境中有不同的含义因此要结合上下文进行词性标注词性标注是自然语言处理<br/>中一项非常重要的基础性工作词性标注主要被应用于文本挖掘text mining和NLP领域是各类基于文本的机器学习任务例如语义分析等的预处理步骤</p> <p style="color: #ffffff !important">
<p style="color:#FFFFFF !important">请对下面两句话进行词性标注:<br/><br/>1.警察制服了小偷<br/><br/>2.环卫工上班必须穿制服<br/><br/>上面两句话中制服都是一个词语它们有什么不同下面说法正确的是</p> 根据上一步文本分词相关知识我们知道中文中同样一个词在不同的句子不同的上下文环境中有不同的含义因此要结合上下文进行词性标注词性标注是自然语言处理
<br />
中一项非常重要的基础性工作词性标注主要被应用于文本挖掘text mining和NLP领域是各类基于文本的机器学习任务例如语义分析等的预处理步骤
</p>
<p style="color: #ffffff !important">
请对下面两句话进行词性标注:
<br />
<br />
1.警察制服了小偷
<br />
<br />
2.环卫工上班必须穿制服
<br />
<br />
上面两句话中制服都是一个词语它们有什么不同下面说法正确的是
</p>
<div class="answer"> <div class="answer">
<p><el-checkbox v-model="answer2.studentAnswer" label="A" size="large" @change="answerChanged(answer2, '2')">A.</el-checkbox></p> <p><el-checkbox v-model="answer2.studentAnswer" label="A" size="large" @change="answerChanged(answer2, '2')">A.</el-checkbox></p>
<p><el-checkbox v-model="answer2.studentAnswer" label="B" size="large" @change="answerChanged(answer2, '2')">B.</el-checkbox></p> <p><el-checkbox v-model="answer2.studentAnswer" label="B" size="large" @change="answerChanged(answer2, '2')">B.</el-checkbox></p>
@ -80,24 +100,33 @@
<div class="step-item"> <div class="step-item">
<span>步骤三</span> <span>步骤三</span>
</div> </div>
<span>文本摘要</span><br/> <span>文本摘要</span>
<br />
</div> </div>
<p style="color:#FFFFFF !important">对于长文本的文本总结在信息快速膨胀的时代尤其有意义如对每日新闻的自动总结可以快速为我们提供有效的信息文本总结模型有两种可用的方法一种是摘要式的方法即从 <p style="color: #ffffff !important">
语义方面提供更加简单精炼的总结另一种是抽取式的方法即通过对原文中的关键语句进行重新排列最大限度地提炼原文的主要信息抽取式的方法不需要人工标注和训练因此 对于长文本的文本总结在信息快速膨胀的时代尤其有意义如对每日新闻的自动总结可以快速为我们提供有效的信息文本总结模型有两种可用的方法一种是摘要式的方法即从 语义方面提供更加简单精炼的总结另一种是抽取式的方法即通过对原文中的关键语句进行重新排列最大限度地提炼原文的主要信息抽取式的方法不需要人工标注和训练因此 更加简单明了
更加简单明了<br/> <br />
请针对下面这段文字进行总结撰写100字以内的摘要再点击自动生成摘要跟自己撰写的摘要对比下体验下AI的强大功能吧 请针对下面这段文字进行总结撰写100字以内的摘要再点击自动生成摘要跟自己撰写的摘要对比下体验下AI的强大功能吧
</p> </p>
<div class="Abstract"> <div class="Abstract">
<el-scrollbar height="300px"> <el-scrollbar height="300px">
<div class="texts" style="color:#FFFFFF !important"> <div class="texts" style="color: #000000 !important">
大模型的高速发展和渗透带来生成式人工智能的广泛应用形形色色的生成式人工智能插件在短短几个月内交互到了人类社会的生产生活中引发新一轮智能化浪潮正如数十年前计算机技术互联网革命引领了技术与生产方式的历史性变革生成式人工智能开始深刻地影响人们生活的方方面面当我们使用生成式人工智能高效搜索生成文本提高工作效率当我们感受训练聊天机器人的新鲜感当我们在文本之上使用图像生成音频视频生成生成式人工智能的潜在风险也在不知不觉中逐渐渗透<br/><br/> 大模型的高速发展和渗透带来生成式人工智能的广泛应用形形色色的生成式人工智能插件在短短几个月内交互到了人类社会的生产生活中引发新一轮智能化浪潮正如数十年前计算机技术互联网革命引领了技术与生产方式的历史性变革生成式人工智能开始深刻地影响人们生活的方方面面当我们使用生成式人工智能高效搜索生成文本提高工作效率当我们感受训练聊天机器人的新鲜感当我们在文本之上使用图像生成音频视频生成生成式人工智能的潜在风险也在不知不觉中逐渐渗透
科技创新的二元性历来受到社会广泛关注从互联网的数据隐私到智能机器人的道德伦理再到生成式人工智能对于个人隐私的处理和引发潜在欺诈行为风险如何规范应用值得我们深度思考<br/><br/> <br />
用户会给生成式人工智能工具提供个人公司或所属社会组织的非公开信息模型获得了这些数据便有可能在后续各类生成任务中泄露信息过去担忧手机APP等软件在用户未察觉时对其隐私进行观察和调用而在生成式人工智能应用场景中亦存在隐私和信息泄露风险例如生成式人工智能可以被用来创建背景丰富看似来源可靠的信息进而诱导用户点击恶意链接或下载恶意软件可以塑造丰富立体的社交媒体形象甚至模仿某人的声音或外貌引导造谣与诈骗可以被训练为向特定用户推荐误导性内容或在某些情况下加强他们已有的偏见等等<br/><br/> <br />
生成式人工智能可处理海量数据但也给知识产权保护个人隐私保护打击虚假信息等方面带来新挑战积极推进人工智能治理法治与社会教育是促进守正创新的两大抓手<br/><br/> 科技创新的二元性历来受到社会广泛关注从互联网的数据隐私到智能机器人的道德伦理再到生成式人工智能对于个人隐私的处理和引发潜在欺诈行为风险如何规范应用值得我们深度思考
<br />
<br />
用户会给生成式人工智能工具提供个人公司或所属社会组织的非公开信息模型获得了这些数据便有可能在后续各类生成任务中泄露信息过去担忧手机APP等软件在用户未察觉时对其隐私进行观察和调用而在生成式人工智能应用场景中亦存在隐私和信息泄露风险例如生成式人工智能可以被用来创建背景丰富看似来源可靠的信息进而诱导用户点击恶意链接或下载恶意软件可以塑造丰富立体的社交媒体形象甚至模仿某人的声音或外貌引导造谣与诈骗可以被训练为向特定用户推荐误导性内容或在某些情况下加强他们已有的偏见等等
<br />
<br />
生成式人工智能可处理海量数据但也给知识产权保护个人隐私保护打击虚假信息等方面带来新挑战积极推进人工智能治理法治与社会教育是促进守正创新的两大抓手
<br />
<br />
一方面营造安全有序的法治环境规范生成式人工智能服务为减少虚假信息的传播建议明确禁止或限制其在特定领域的使用例如批量化的虚拟形象创建和对话为降低隐私泄露风险建议规定生成式人工智能使用个人数据时需经用户同意确保数据隐私得到保护用户有权决定哪些数据可以被使用以及生成的内容如何使用为减少对社会公序良俗的破坏建议严格限制仇恨言论歧视性内容创建可考量设立专门的机构负责技术审查和认证评估生成式人工智能系统的安全性可信度伦理问题等 一方面营造安全有序的法治环境规范生成式人工智能服务为减少虚假信息的传播建议明确禁止或限制其在特定领域的使用例如批量化的虚拟形象创建和对话为降低隐私泄露风险建议规定生成式人工智能使用个人数据时需经用户同意确保数据隐私得到保护用户有权决定哪些数据可以被使用以及生成的内容如何使用为减少对社会公序良俗的破坏建议严格限制仇恨言论歧视性内容创建可考量设立专门的机构负责技术审查和认证评估生成式人工智能系统的安全性可信度伦理问题等
</div> </div>
</el-scrollbar> </el-scrollbar>
<el-input type="textarea" style="width: calc(100% - 20px); margin-top: 10px;" placeholder="请针对上述文本给出100-300字的文本摘要" v-model.trim="digest"/> <el-input type="textarea" style="width: calc(100% - 20px); margin-top: 10px" placeholder="请针对上述文本给出100-300字的文本摘要" v-model.trim="digest" />
<div class="Abstract-footer"> <div class="Abstract-footer">
<el-button type="primary" size="mini" @click="generateAbstract"></el-button> <el-button type="primary" size="mini" @click="generateAbstract"></el-button>
<el-button type="primary" size="mini" @click="generateAbstractAuto"></el-button> <el-button type="primary" size="mini" @click="generateAbstractAuto"></el-button>
@ -108,52 +137,91 @@
<div class="step-item"> <div class="step-item">
<span>步骤四</span> <span>步骤四</span>
</div> </div>
<span>词云</span><br/> <span>词云</span>
<br />
</div> </div>
<p style="color:#FFFFFF !important"> <p style="color: #ffffff !important">
词云主要提供了一种观察社交媒体网站上的热门话题或搜索关键字的一种方式它可以对网络文本中出现频率较高的关键词予以视觉上的突出形成关键词云层关键词渲染从而过滤掉大量的文本信息使浏览网页者只要一眼扫过文本就可以领略文本的主旨<br/><br/> 词云主要提供了一种观察社交媒体网站上的热门话题或搜索关键字的一种方式它可以对网络文本中出现频率较高的关键词予以视觉上的突出形成关键词云层关键词渲染从而过滤掉大量的文本信息使浏览网页者只要一眼扫过文本就可以领略文本的主旨
<br />
<br />
接下来来体验下词云生成吧 接下来来体验下词云生成吧
</p> </p>
<div class="Abstract"> <div class="Abstract">
<el-scrollbar height="300px"> <el-scrollbar height="300px">
<div class="texts"> <div class="texts">
人工智能发展迎来新趋势<br/> 人工智能发展迎来新趋势
通顺的自然语言生成 通达的全领域知识体系覆盖 通畅的人机交互接口<br/> <br />
人工智能发展迎来新趋势AI前沿观察<br/> 通顺的自然语言生成 通达的全领域知识体系覆盖 通畅的人机交互接口
中央经济工作会议提出要大力推进新型工业化发展数字经济加快推动人工智能发展<br/> <br />
2023年10月18日中国在第三届一带一路国际合作高峰论坛期间发布全球人工智能治理倡议围绕人工智能发展安全治理三方面系统阐述了人工智能治理中国方案<br/> 人工智能发展迎来新趋势AI前沿观察
近年来全球人工智能技术快速发展成为推动科技和产业加速发展的重要力量对经济社会发展和人类文明进步产生深远影响人工智能技术发展现状如何有哪些应用未来趋势怎样记者采访了相关专家<br/> <br />
人工智能处理复杂任务的能力大为提升<br/> 中央经济工作会议提出要大力推进新型工业化发展数字经济加快推动人工智能发展
当前人工智能技术已进入实用阶段正深刻地改变着人类的生产生活<br/> <br />
近70年的发展历程中人工智能经历了灌输规则灌输知识从数据中学习这三个阶段近年来在全球迅速发展的人工智能大模型技术其依托的基本模型都基于大数据+大算力+强算法训练这是人工智能发展第三阶段的典型体现北京智源人工智能研究院院长黄铁军说<br/> 2023年10月18日中国在第三届一带一路国际合作高峰论坛期间发布全球人工智能治理倡议围绕人工智能发展安全治理三方面系统阐述了人工智能治理中国方案
目前各类人工智能大模型处于迅猛发展之中全球众多高科技企业纷纷投身人工智能大模型建设<br/> <br />
现在围绕人工智能大模型已形成相对成熟的技术框架但产品和生态尚在发展形成之中中国科学院自动化研究所副所长研究员曾大军说总体而言人工智能大模型的技术发展历程相比以往任何人工智能技术都更为迅猛其影响力也是史无前例的<br/> 近年来全球人工智能技术快速发展成为推动科技和产业加速发展的重要力量对经济社会发展和人类文明进步产生深远影响人工智能技术发展现状如何有哪些应用未来趋势怎样记者采访了相关专家
人工智能大模型的出现为通用人工智能的实现打开了新的想象空间大大提升了人工智能处理复杂任务的能力<br/> <br />
比如基于人工智能大语言模型的聊天机器人能够实现高质量的信息整合翻译和简单问题求解与规划曾大军说这类机器人受到关注主要是因为其已初步具备通用人工智能的部分特性包括通顺的自然语言生成全领域的知识体系覆盖跨任务场景的通用处理模型通畅的人机交互接口<br/> 人工智能处理复杂任务的能力大为提升
不过目前人工智能大模型能力仍有局限性<br/> <br />
一方面由于人工智能大模型自身结构和机制漏洞有被恶意攻击的风险另一方面人工智能大模型自身的知识表达和学习模式还存在缺陷导致其回答会有常识性错误杜撰内容等曾大军说人工智能学者们正在围绕这些问题进行攻关<br/> 当前人工智能技术已进入实用阶段正深刻地改变着人类的生产生活
人工智能加速迈向全面应用新阶段<br/> <br />
我是刚入学的大一计算机专业学生想选修人工智能课程需要做什么准备你需要学习基础数学知识编程语言学习机器学习算法关注技术趋势这段对话并非出自师生之间而是学生与人工智能之间的问答<br/> 近70年的发展历程中人工智能经历了灌输规则灌输知识从数据中学习这三个阶段近年来在全球迅速发展的人工智能大模型技术其依托的基本模型都基于大数据+大算力+强算法训练这是人工智能发展第三阶段的典型体现北京智源人工智能研究院院长黄铁军说
2023年8月浙江大学联合高等教育出版社等发布智海三乐教育垂直大模型在核心教材领域论文和学位论文等语料和专业指令数据集的基础上可提供智能问答试题生成学习导航教学评估等服务现已在多所高校应用<br/> <br />
我们把这些教材拆成语句段落篇章去喂给大模型这些高质量的语料会合成词与词之间的概率关联给学生以启迪浙江大学教授吴飞说<br/> 目前各类人工智能大模型处于迅猛发展之中全球众多高科技企业纷纷投身人工智能大模型建设
工业质检知识管理代码生成语音交互当前中国人工智能正从单点应用向多元化应用从通用场景向行业特定场景不断深入加速迈向全面应用新阶段特别是随着人工智能大模型的突破和生成式人工智能的兴起人工智能得以更好处理生产生活中的复杂问题为各行业实现产品和流程革新提供了更加先进的工具和手段<br/> <br />
预测一个台风未来10天的路径过去需要在3000台服务器上花费5小时进行仿真现在基于预训练的盘古气象大模型10秒内就可以获得更精确的预测结果字数将近4000万的一套古籍研究人员利用人工智能3个多月就完成了识别点校上线发布<br/> 现在围绕人工智能大模型已形成相对成熟的技术框架但产品和生态尚在发展形成之中中国科学院自动化研究所副所长研究员曾大军说总体而言人工智能大模型的技术发展历程相比以往任何人工智能技术都更为迅猛其影响力也是史无前例的
人工智能大模型带动生成式人工智能产业迅速发展在科学探索技术研发艺术创作企业经营等诸多领域都带来了巨大的创新机遇中国工程院院士王恩东说<br/> <br />
在供需两侧的共同推动下技术创新成果开始大规模地从实验室研究走向产业实践人工智能产业化进程不断加快据不完全统计截至2023年10月中国累计发布200余个人工智能大模型科研院所和企业成为开发主力军<br/> 人工智能大模型的出现为通用人工智能的实现打开了新的想象空间大大提升了人工智能处理复杂任务的能力
在华为混合云总裁尚海峰看来以人工智能为代表的创新技术正在加快重塑各个行业<br/> <br />
科技部新一代人工智能发展研究中心主任赵志耘表示人工智能技术正沿着追求更高精度挑战更复杂任务拓展能力边界等方向持续演进场景创新成为人工智能技术升级产业增长的新路径<br/> 比如基于人工智能大语言模型的聊天机器人能够实现高质量的信息整合翻译和简单问题求解与规划曾大军说这类机器人受到关注主要是因为其已初步具备通用人工智能的部分特性包括通顺的自然语言生成全领域的知识体系覆盖跨任务场景的通用处理模型通畅的人机交互接口
浪潮信息高级副总裁刘军认为未来人工智能还需要进一步去深入应用场景赋能具体的产业环节这个过程很难靠一家厂商独立完成需要产业链创新生态更多的深度协同刘军说<br/> <br />
更加通用的人工智能有望实现<br/> 不过目前人工智能大模型能力仍有局限性
专家表示以人工智能大模型为代表的人工智能第三发展阶段未来会有一段较长的发展红利期将成为新一轮科技革命和产业变革的重要驱动力量<br/> <br />
中国科学院自动化研究所对人工智能大模型的演进态势做了研判曾大军介绍了其观点应用和创新生态正在发生剧变或至少有剧变的潜质人工智能大模型推动决策智能迅猛发展人工智能大模型小型化和领域专业化需求非常迫切更加通用的人工智能有望实现<br/> 一方面由于人工智能大模型自身结构和机制漏洞有被恶意攻击的风险另一方面人工智能大模型自身的知识表达和学习模式还存在缺陷导致其回答会有常识性错误杜撰内容等曾大军说人工智能学者们正在围绕这些问题进行攻关
曾大军说人工智能大模型就像一个人类大脑的雏形通过喂给各种数据实现各种智能能力人工智能大模型正在重新定义人与计算机的互动关系有望成为人机交互的主要接口<br/> <br />
曾大军着重强调了人工智能大模型小型化和领域化的发展他表示现有人工智能大模型的算力和能耗挑战会促使很多工作向领域专用化轻量级的小模型或大小模型混搭的方向发展特别是金融教育医疗交通等领域力求降低大模型的成本<br/> 人工智能加速迈向全面应用新阶段
黄铁军认为人工智能将从信息智能到实体智能发展视觉具身人工智能大模型将是下一个爆发点大数据是世界的表达从中训练出的语言认知模型可以支持信息服务语言类大模型能够提高自动驾驶机器人等实体的智能水平但还需要视觉听觉具身交互等技术的发展<br/> <br />
黄铁军告诉记者目前的智能涌现还只是静态涌现还不具备人脑的动态涌现能力未来有望通过类脑智能实现真正拥有动态涌现能力的人工智能<br/> 我是刚入学的大一计算机专业学生想选修人工智能课程需要做什么准备你需要学习基础数学知识编程语言学习机器学习算法关注技术趋势这段对话并非出自师生之间而是学生与人工智能之间的问答
曾大军认为人工智能大模型有望发展成为更加通用的人工智能在不久的将来人工智能大模型将超越信息域结合硬件设施发展成为与物理和人类世界互动的具象智能逐步缩小与真正的通用人工智能的差距<br/> <br />
预计未来智能程度还将不断提高对各行业的带动和影响更为深刻这是其他技术难以比肩的黄铁军说<br/> 2023年8月浙江大学联合高等教育出版社等发布智海三乐教育垂直大模型在核心教材领域论文和学位论文等语料和专业指令数据集的基础上可提供智能问答试题生成学习导航教学评估等服务现已在多所高校应用
在曾大军看来决策科学加人工智能融合创新能够碰撞出非常多的火花<br/> <br />
我们把这些教材拆成语句段落篇章去喂给大模型这些高质量的语料会合成词与词之间的概率关联给学生以启迪浙江大学教授吴飞说
<br />
工业质检知识管理代码生成语音交互当前中国人工智能正从单点应用向多元化应用从通用场景向行业特定场景不断深入加速迈向全面应用新阶段特别是随着人工智能大模型的突破和生成式人工智能的兴起人工智能得以更好处理生产生活中的复杂问题为各行业实现产品和流程革新提供了更加先进的工具和手段
<br />
预测一个台风未来10天的路径过去需要在3000台服务器上花费5小时进行仿真现在基于预训练的盘古气象大模型10秒内就可以获得更精确的预测结果字数将近4000万的一套古籍研究人员利用人工智能3个多月就完成了识别点校上线发布
<br />
人工智能大模型带动生成式人工智能产业迅速发展在科学探索技术研发艺术创作企业经营等诸多领域都带来了巨大的创新机遇中国工程院院士王恩东说
<br />
在供需两侧的共同推动下技术创新成果开始大规模地从实验室研究走向产业实践人工智能产业化进程不断加快据不完全统计截至2023年10月中国累计发布200余个人工智能大模型科研院所和企业成为开发主力军
<br />
在华为混合云总裁尚海峰看来以人工智能为代表的创新技术正在加快重塑各个行业
<br />
科技部新一代人工智能发展研究中心主任赵志耘表示人工智能技术正沿着追求更高精度挑战更复杂任务拓展能力边界等方向持续演进场景创新成为人工智能技术升级产业增长的新路径
<br />
浪潮信息高级副总裁刘军认为未来人工智能还需要进一步去深入应用场景赋能具体的产业环节这个过程很难靠一家厂商独立完成需要产业链创新生态更多的深度协同刘军说
<br />
更加通用的人工智能有望实现
<br />
专家表示以人工智能大模型为代表的人工智能第三发展阶段未来会有一段较长的发展红利期将成为新一轮科技革命和产业变革的重要驱动力量
<br />
中国科学院自动化研究所对人工智能大模型的演进态势做了研判曾大军介绍了其观点应用和创新生态正在发生剧变或至少有剧变的潜质人工智能大模型推动决策智能迅猛发展人工智能大模型小型化和领域专业化需求非常迫切更加通用的人工智能有望实现
<br />
曾大军说人工智能大模型就像一个人类大脑的雏形通过喂给各种数据实现各种智能能力人工智能大模型正在重新定义人与计算机的互动关系有望成为人机交互的主要接口
<br />
曾大军着重强调了人工智能大模型小型化和领域化的发展他表示现有人工智能大模型的算力和能耗挑战会促使很多工作向领域专用化轻量级的小模型或大小模型混搭的方向发展特别是金融教育医疗交通等领域力求降低大模型的成本
<br />
黄铁军认为人工智能将从信息智能到实体智能发展视觉具身人工智能大模型将是下一个爆发点大数据是世界的表达从中训练出的语言认知模型可以支持信息服务语言类大模型能够提高自动驾驶机器人等实体的智能水平但还需要视觉听觉具身交互等技术的发展
<br />
黄铁军告诉记者目前的智能涌现还只是静态涌现还不具备人脑的动态涌现能力未来有望通过类脑智能实现真正拥有动态涌现能力的人工智能
<br />
曾大军认为人工智能大模型有望发展成为更加通用的人工智能在不久的将来人工智能大模型将超越信息域结合硬件设施发展成为与物理和人类世界互动的具象智能逐步缩小与真正的通用人工智能的差距
<br />
预计未来智能程度还将不断提高对各行业的带动和影响更为深刻这是其他技术难以比肩的黄铁军说
<br />
在曾大军看来决策科学加人工智能融合创新能够碰撞出非常多的火花
<br />
人工智能特别是经过知识自动推理的加持之后能够实现从已知到未知的跨越曾大军进一步解释更高层级的决策功能比如产业态势的研判风险评估等这种从未知到未知的决策机器智能有可能起到很大的辅助作用记者 吴月辉 谷业凯 人工智能特别是经过知识自动推理的加持之后能够实现从已知到未知的跨越曾大军进一步解释更高层级的决策功能比如产业态势的研判风险评估等这种从未知到未知的决策机器智能有可能起到很大的辅助作用记者 吴月辉 谷业凯
</div> </div>
</el-scrollbar> </el-scrollbar>
@ -161,9 +229,7 @@
<div class="left"> <div class="left">
<el-button type="primary" size="mini" @click="generateWordcloud"></el-button> <el-button type="primary" size="mini" @click="generateWordcloud"></el-button>
</div> </div>
<div class="right1"> <div class="right1"></div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -176,71 +242,138 @@
<div class="right"> <div class="right">
<span @click="NaturallanguageprocessingVisible = true"></span> <span @click="NaturallanguageprocessingVisible = true"></span>
</div> </div>
<el-dialog <el-dialog custom-class="gdialog" v-model="NaturallanguageprocessingVisible" title="自然语言处理" width="66%">
custom-class="gdialog"
v-model="NaturallanguageprocessingVisible"
title="自然语言处理"
width="66%">
<el-scrollbar height="650px"> <el-scrollbar height="650px">
<p>自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法自然语言处理是一门融语言学计算机科学数学于一体的科学因此这一领域的研究将涉及自然语言即人们日常使用的语言所以它与语言学的研究有着密切的联系但又有重要的区别自然语言处理并不是一般地研究自然语言而在于研制能有效地实现自然语言通信的计算机系统特别是其中的软件系统因而它是计算机科学的一部分<br/><br/> <p>
自然语言处理主要应用于机器翻译舆情监测自动摘要观点提取文本分类问题回答文本语义对比语音识别中文OCR等方面<br/><br/> 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法自然语言处理是一门融语言学计算机科学数学于一体的科学因此这一领域的研究将涉及自然语言即人们日常使用的语言所以它与语言学的研究有着密切的联系但又有重要的区别自然语言处理并不是一般地研究自然语言而在于研制能有效地实现自然语言通信的计算机系统特别是其中的软件系统因而它是计算机科学的一部分
针对文本数据自然语言处理流程如下<br/><br/> <br />
<span class="headline">1.文本分词</span><br/> <br />
中文分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记中文分词是文本挖掘的基础对于输入的一段中文成功的进行中文分词可以达到电脑自动识别语句含义的效果<br/> 自然语言处理主要应用于机器翻译舆情监测自动摘要观点提取文本分类问题回答文本语义对比语音识别中文OCR等方面
中文分词技术属于自然语言处理技术范畴对于一句话人可以通过自己的知识来明白哪些是词哪些不是词但如何让计算机也能理解其处理过程就是分词算法<br/> <br />
有了成熟的分词算法是否就能容易的解决中文分词的问题呢事实远非如此中文是一种十分复杂的语言让计算机理解中文语言更是困难在中文分词过程中有两大难题一直没有完全突破<br/><br/> <br />
歧义识别<br/> 针对文本数据自然语言处理流程如下
歧义是指同样的一句话可能有两种或者更多的切分方法例如在句子这个门把手坏了把手是个词但在句子请把手拿开把手就不是一个词在句子将军任命了一名中将中将是个词但在句子产量三年中将增长两倍中将就不再是词这些词计算机又如何去识别?<br/><br/> <br />
如果交集型歧义和组合型歧义计算机都能解决的话在歧义中还有一个难题是真歧义真歧义意思是给出一句话由人去判断也不知道哪个应该是词哪个应该不是词例如乒乓球拍卖完了可以切分成乒乓 球拍 也可切分成乒乓球 拍卖 如果没有上下文其他的句子恐怕谁也不知道拍卖在这里算不算一个词<br/><br/> <br />
新词识别<br/> <span class="headline">1.文本分词</span>
命名实体人名地名新词专业术语称为未登录词也就是那些在分词词典中没有收录但又确实能称为词的那些词最典型的是人名人可以很容易理解句子王军虎去广州了王军虎是个词因为是一个人的名字但要是让计算机去识别就困难了如果把王军虎做为一个词收录到字典中去全世界有那么多名字而且每时每刻都有新增的人名收录这些人名本身就是一项既不划算又巨大的工程即使这项工作可以完成还是会存在问题例如在句子王军虎头虎脑的王军虎还能不能算词<br/><br/> <br />
除了人名以外还有机构名地名产品名商标名简称省略语等都是很难处理的问题而且这些又正好是人们经常使用的词因此对于搜索引擎来说分词系统中的新词识别十分重要新词识别准确率已经成为评价一个分词系统好坏的重要标志之一<br/><br/> 中文分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记中文分词是文本挖掘的基础对于输入的一段中文成功的进行中文分词可以达到电脑自动识别语句含义的效果
<span class="headline">2.词性标注</span><br/> <br />
根据上一步文本分词相关知识我们知道中文中同样一个词在不同的句子不同的上下文环境中有不同的含义因此要结合上下文进行词性标注词性标注Part-Of-Speech tagging, POS tagging也被称为语法标注grammatical tagging或词类消疑word-category disambiguation是语料库语言学corpus linguistics中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术<br/><br/> 中文分词技术属于自然语言处理技术范畴对于一句话人可以通过自己的知识来明白哪些是词哪些不是词但如何让计算机也能理解其处理过程就是分词算法
词性标注在本质上是分类问题将语料库中的单词按词性分类一个词的词性由其在所属语言的含义形态和语法功能决定以汉语为例汉语的词类系统有18个子类包括7类体词4类谓词5类虚词代词和感叹词词类不是闭合集而是有兼词现象例如制服在作为服装和作为动作时会被归入不同的词类因此词性标注与上下文有关 [3] 对词类的理论研究可以得到基于人工规则的词性标注方法这类方法对句子的形态进行分析并按预先给定的规则赋予词类<br/><br/> <br />
词性标注可以由人工或特定算法完成使用机器学习machine learning方法实现词性标注是自然语言处理Natural Language Processing, NLP的研究内容常见的词性标注算法包括隐马尔可夫模型Hidden Markov Model, HMM条件随机场Conditional random fields, CRFs<br/><br/> 有了成熟的分词算法是否就能容易的解决中文分词的问题呢事实远非如此中文是一种十分复杂的语言让计算机理解中文语言更是困难在中文分词过程中有两大难题一直没有完全突破
<span class="headline">3.分类管理</span><br/> <br />
分类管理是进行文本分类之前先预定义类别例如新闻资讯中的体育政治科技等类别因此我们需要先进行分类器训练让系统知道什么样的文本属于哪一类本系统使用了训练文本集训练分类器人为定义一个类别上传语料文件对系统进行训练训练完之后系统会自动把与语料内容相关度比较高的分为一类语料内容越丰富分类越准确<br/><br/> <br />
<span class="headline">4.文本分类</span><br/> 歧义识别
文本分类是用电脑对文本集按照一定的分类体系或标准进行自动分类标记它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对新的文档进行类别判断<br/> <br />
伴随着信息的爆炸式增长人工标注数据已经变得耗时质量低下且受到标注人主观意识的影响因此利用机器自动化的实现对文本的标注变得具有现实意义将重复且枯燥的文本标注任务交由计算机进行处理能够有效克服以上问题同时所标注的数据具有一致性高质量等特点<br/><br/> 歧义是指同样的一句话可能有两种或者更多的切分方法例如在句子这个门把手坏了把手是个词但在句子请把手拿开把手就不是一个词在句子将军任命了一名中将中将是个词但在句子产量三年中将增长两倍中将就不再是词这些词计算机又如何去识别?
其应用场景众多包括<br/> <br />
情感分析Sentiment Analyse<br/> <br />
主题分类Topic Labeling<br/> 如果交集型歧义和组合型歧义计算机都能解决的话在歧义中还有一个难题是真歧义真歧义意思是给出一句话由人去判断也不知道哪个应该是词哪个应该不是词例如乒乓球拍卖完了可以切分成乒乓 球拍 也可切分成乒乓球 拍卖 如果没有上下文其他的句子恐怕谁也不知道拍卖在这里算不算一个词
问答任务(Question Answering)<br/> <br />
意图识别(Dialog Act Classification)<br/> <br />
自然语言推理Natural Language Inference<br/><br/> 新词识别
其分类标签可以是<br/> <br />
情感分析积极消极中性<br/> 命名实体人名地名新词专业术语称为未登录词也就是那些在分词词典中没有收录但又确实能称为词的那些词最典型的是人名人可以很容易理解句子王军虎去广州了王军虎是个词因为是一个人的名字但要是让计算机去识别就困难了如果把王军虎做为一个词收录到字典中去全世界有那么多名字而且每时每刻都有新增的人名收录这些人名本身就是一项既不划算又巨大的工程即使这项工作可以完成还是会存在问题例如在句子王军虎头虎脑的王军虎还能不能算词
主题分类金融体育军事社会<br/> <br />
问答任务<br/> <br />
意图识别天气查询歌曲搜索随机闲聊<br/> 除了人名以外还有机构名地名产品名商标名简称省略语等都是很难处理的问题而且这些又正好是人们经常使用的词因此对于搜索引擎来说分词系统中的新词识别十分重要新词识别准确率已经成为评价一个分词系统好坏的重要标志之一
自然语言推理导出矛盾中立<br/><br/> <br />
<span class="headline"> 5.文本摘要</span><br/> <br />
文本摘要是指通过各种技术对文本或者是文本的集合抽取总结或是精炼其中的要点信息用以概括和展示原始文本的主要内容或大意作为文本生成任务的主要方向之一从本质上而言这是一种信息压缩技术文本摘要技术是信息爆炸时代提升人们获取有效信息效率的关键技术之一如何从冗余非结构化的长文本中提炼出关键信息构成精简通顺的摘要是文本摘要的核心问题<br/><br/> <span class="headline">2.词性标注</span>
按照实现技术方案的不同可以分为抽取式文本摘要生成式文本摘要<br/> <br />
抽取式摘要即直接从原文中抽取一些预先设置好的单元来组成摘要抽取单元一般为句子短语或词语目前大多数方法都是以句子作为抽取单元抽取式的方法基于一个假设一篇文档的核心思想可以用文档中的某一句或几句话来概括那么摘要的任务就变成了找到文档中最重要的几句话<br/> 根据上一步文本分词相关知识我们知道中文中同样一个词在不同的句子不同的上下文环境中有不同的含义因此要结合上下文进行词性标注词性标注Part-Of-Speech tagging, POS tagging也被称为语法标注grammatical tagging或词类消疑word-category disambiguation是语料库语言学corpus linguistics中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术
生成式摘要它试图通过理解原文的意思来生成摘要其实就是模仿人类写摘要的方式可能会用 原文中的词 也可能会用新词 (未出现在原文中的词)来做表述其优点是相比于抽取式而言用词更加灵活 因为所产生的词可能从未在原文中出现过 <br />
总的来说抽取式的文本摘要直接从原文中摘取完整的句子作为文章的摘要所以通常在语法层面的正确性以及对原文概括的准确性上比较占优势如同按部就班的老实人令人心安生成式的文本摘要可以产生原文中没有的单词和短语容易产生事实性错误好比一位逍遥的江湖侠客蛟龙终非池中物目前我们这位侠客虽然艳惊四座但却容易野马脱缰返回不符合事实的结果<br/><br/> <br />
<span class="headline">6.相似度计算</span><br/> 词性标注在本质上是分类问题将语料库中的单词按词性分类一个词的词性由其在所属语言的含义形态和语法功能决定以汉语为例汉语的词类系统有18个子类包括7类体词4类谓词5类虚词代词和感叹词词类不是闭合集而是有兼词现象例如制服在作为服装和作为动作时会被归入不同的词类因此词性标注与上下文有关 [3] 对词类的理论研究可以得到基于人工规则的词性标注方法这类方法对句子的形态进行分析并按预先给定的规则赋予词类
在自然语言处理中我们经常需要判定两个东西是否相似<br/> <br />
比如在微博的热点话题推荐那里我们需要比较微博之间的相似度让相似度高的微博聚集在一起形成一个簇提出一个主题<br/> <br />
在问答系统中比如说人工客服我们需要提前准备好问题和一些答案让用户输入的问题与题库中的问题进行相似度的比较最后输出答案<br/> 词性标注可以由人工或特定算法完成使用机器学习machine learning方法实现词性标注是自然语言处理Natural Language Processing, NLP的研究内容常见的词性标注算法包括隐马尔可夫模型Hidden Markov Model, HMM条件随机场Conditional random fields, CRFs
在推荐系统中我们需要提取一个用户的所有物品在根据这个物品找到对应的用户群比较两个用户之间的相似性在进行相应的推荐协同过滤<br/> <br />
在对语料进行预处理的时候我们需要给予文本的相似度把相似度高的重复主题过滤掉<br/> <br />
如果是文本分析它首先就要用到分词技术然后去掉不必要的词语气词连接词然后对词给一个抽象的量表示权重最后在用一些方法去统计出整体的相似度<br/><br/> <span class="headline">3.分类管理</span>
<span class="headline">7.情感分析</span><br/> <br />
情感分析是指通过文本来挖掘人们对于产品服务组织个人事件等的观点情感倾向态度等情感分析是随着互联网发展而产生的早期主要用于对网上销售商品的用户评语的分析以便判断用户对其所购商品是喜欢还是不喜欢后期随着自媒体的流行情感分析技术更多地用于识别话题发起者参与者的情感趋向从中判断或挖掘话题中的价值由此来分析相关舆情<br/> 分类管理是进行文本分类之前先预定义类别例如新闻资讯中的体育政治科技等类别因此我们需要先进行分类器训练让系统知道什么样的文本属于哪一类本系统使用了训练文本集训练分类器人为定义一个类别上传语料文件对系统进行训练训练完之后系统会自动把与语料内容相关度比较高的分为一类语料内容越丰富分类越准确
情感分析的流程包括文本预处理特征标注与选择训练模型调整模型本系统是先新建情感词用户定义情感词并上传语料对系统进行训练训练之后系统即可自动对用户输入的文本进行情感分析给出情感分析结果语料内容越丰富则分析结果越准确<br/> <br />
随着近年来深度学习的发展以及文本数据的可获取性不断提升情感分析在自然语言处理研究领域中日渐举足轻重慢慢从理论研究领域拓展到实践应用中目前主要用于预测电影票房股票趋势舆情分析改进服务及产品了解用户体验等<br/><br/> <br />
<span class="headline"> 8.数据可视化</span><br/> <span class="headline">4.文本分类</span>
数据可视化主要旨在借助于图形化手段清晰有效地传达与沟通信息但是这并不就意味着数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味或者是为了看上去绚丽多彩而显得极端复杂为了有效地传达思想概念美学形式与功能需要齐头并进通过直观地传达关键的方面与特征从而实现对于相当稀疏而又复杂的数据集的深入洞察<br/> <br />
数据可视化是以图形的方式呈现结构化或非结构化数据从而将隐藏在数据中的信息直接呈现给人们它不仅仅是使用数据可视化工具将数据转化为图形相反它是从数据的角度看待世界换句话说数据可视化的对象是数据把可视化作为探索世界的手段<br/> 文本分类是用电脑对文本集按照一定的分类体系或标准进行自动分类标记它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对新的文档进行类别判断
数据可视化最大重要性是在于它帮助人们更快地理解数据寻找堆积如山的信息之间的联系并不容易但图形和图表可以将无形的信息转化为可见的图形符号直接清晰地表达出来帮助你快速发现关键点研究表明人们记得他们看到的大约80%的事情但只记得他们读过的20%大脑记忆图像的速度比抽象单词快一百万倍所以可视化数据可以加深人们对信息的记忆</p> <br />
伴随着信息的爆炸式增长人工标注数据已经变得耗时质量低下且受到标注人主观意识的影响因此利用机器自动化的实现对文本的标注变得具有现实意义将重复且枯燥的文本标注任务交由计算机进行处理能够有效克服以上问题同时所标注的数据具有一致性高质量等特点
<br />
<br />
其应用场景众多包括
<br />
情感分析Sentiment Analyse
<br />
主题分类Topic Labeling
<br />
问答任务(Question Answering)
<br />
意图识别(Dialog Act Classification)
<br />
自然语言推理Natural Language Inference
<br />
<br />
其分类标签可以是
<br />
情感分析积极消极中性
<br />
主题分类金融体育军事社会
<br />
问答任务
<br />
意图识别天气查询歌曲搜索随机闲聊
<br />
自然语言推理导出矛盾中立
<br />
<br />
<span class="headline">5.文本摘要</span>
<br />
文本摘要是指通过各种技术对文本或者是文本的集合抽取总结或是精炼其中的要点信息用以概括和展示原始文本的主要内容或大意作为文本生成任务的主要方向之一从本质上而言这是一种信息压缩技术文本摘要技术是信息爆炸时代提升人们获取有效信息效率的关键技术之一如何从冗余非结构化的长文本中提炼出关键信息构成精简通顺的摘要是文本摘要的核心问题
<br />
<br />
按照实现技术方案的不同可以分为抽取式文本摘要生成式文本摘要
<br />
抽取式摘要即直接从原文中抽取一些预先设置好的单元来组成摘要抽取单元一般为句子短语或词语目前大多数方法都是以句子作为抽取单元抽取式的方法基于一个假设一篇文档的核心思想可以用文档中的某一句或几句话来概括那么摘要的任务就变成了找到文档中最重要的几句话
<br />
生成式摘要它试图通过理解原文的意思来生成摘要其实就是模仿人类写摘要的方式可能会用 原文中的词 也可能会用新词 (未出现在原文中的词)来做表述其优点是相比于抽取式而言用词更加灵活 因为所产生的词可能从未在原文中出现过 总的来说抽取式的文本摘要直接从原文中摘取完整的句子作为文章的摘要所以通常在语法层面的正确性以及对原文概括的准确性上比较占优势如同按部就班的老实人令人心安生成式的文本摘要可以产生原文中没有的单词和短语容易产生事实性错误好比一位逍遥的江湖侠客蛟龙终非池中物目前我们这位侠客虽然艳惊四座但却容易野马脱缰返回不符合事实的结果
<br />
<br />
<span class="headline">6.相似度计算</span>
<br />
在自然语言处理中我们经常需要判定两个东西是否相似
<br />
比如在微博的热点话题推荐那里我们需要比较微博之间的相似度让相似度高的微博聚集在一起形成一个簇提出一个主题
<br />
在问答系统中比如说人工客服我们需要提前准备好问题和一些答案让用户输入的问题与题库中的问题进行相似度的比较最后输出答案
<br />
在推荐系统中我们需要提取一个用户的所有物品在根据这个物品找到对应的用户群比较两个用户之间的相似性在进行相应的推荐协同过滤
<br />
在对语料进行预处理的时候我们需要给予文本的相似度把相似度高的重复主题过滤掉
<br />
如果是文本分析它首先就要用到分词技术然后去掉不必要的词语气词连接词然后对词给一个抽象的量表示权重最后在用一些方法去统计出整体的相似度
<br />
<br />
<span class="headline">7.情感分析</span>
<br />
情感分析是指通过文本来挖掘人们对于产品服务组织个人事件等的观点情感倾向态度等情感分析是随着互联网发展而产生的早期主要用于对网上销售商品的用户评语的分析以便判断用户对其所购商品是喜欢还是不喜欢后期随着自媒体的流行情感分析技术更多地用于识别话题发起者参与者的情感趋向从中判断或挖掘话题中的价值由此来分析相关舆情
<br />
情感分析的流程包括文本预处理特征标注与选择训练模型调整模型本系统是先新建情感词用户定义情感词并上传语料对系统进行训练训练之后系统即可自动对用户输入的文本进行情感分析给出情感分析结果语料内容越丰富则分析结果越准确
<br />
随着近年来深度学习的发展以及文本数据的可获取性不断提升情感分析在自然语言处理研究领域中日渐举足轻重慢慢从理论研究领域拓展到实践应用中目前主要用于预测电影票房股票趋势舆情分析改进服务及产品了解用户体验等
<br />
<br />
<span class="headline">8.数据可视化</span>
<br />
数据可视化主要旨在借助于图形化手段清晰有效地传达与沟通信息但是这并不就意味着数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味或者是为了看上去绚丽多彩而显得极端复杂为了有效地传达思想概念美学形式与功能需要齐头并进通过直观地传达关键的方面与特征从而实现对于相当稀疏而又复杂的数据集的深入洞察
<br />
数据可视化是以图形的方式呈现结构化或非结构化数据从而将隐藏在数据中的信息直接呈现给人们它不仅仅是使用数据可视化工具将数据转化为图形相反它是从数据的角度看待世界换句话说数据可视化的对象是数据把可视化作为探索世界的手段
<br />
数据可视化最大重要性是在于它帮助人们更快地理解数据寻找堆积如山的信息之间的联系并不容易但图形和图表可以将无形的信息转化为可见的图形符号直接清晰地表达出来帮助你快速发现关键点研究表明人们记得他们看到的大约80%的事情但只记得他们读过的20%大脑记忆图像的速度比抽象单词快一百万倍所以可视化数据可以加深人们对信息的记忆
</p>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer></template>
</template>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
@ -248,9 +381,9 @@
<script setup> <script setup>
import * as commonality from "@/api/commonality"; import * as commonality from "@/api/commonality";
// import {getUserId} from "@/utils/auth.js"; // import {getUserId} from "@/utils/auth.js";
import { getUserInfo } from '@/utils/auth' import { getUserInfo } from "@/utils/auth";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const NaturallanguageprocessingVisible=ref(false) const NaturallanguageprocessingVisible = ref(false);
const text1 = ref({ const text1 = ref({
input1: "", input1: "",
input2: "", input2: "",
@ -259,7 +392,7 @@ const text1 = ref({
input5: "", input5: "",
input6: "", input6: "",
input7: "", input7: "",
}) });
const text2 = ref({ const text2 = ref({
input1: "", input1: "",
input2: "", input2: "",
@ -269,141 +402,144 @@ const text2 = ref({
input6: "", input6: "",
input7: "", input7: "",
input8: "", input8: "",
}) });
let participleRecord=ref(0)// let participleRecord = ref(0); //
// //
const correctCount = ref(0); const correctCount = ref(0);
// //
const errorCount = ref(0); const errorCount = ref(0);
const digest = ref('')// const digest = ref(""); //
const digest1 = ref('')// const digest1 = ref(""); //
const restartStatus = ref(false); const restartStatus = ref(false);
const textChanged = (text, setp) => { const textChanged = (text, setp) => {
const sentence1 = '这个/门把手/坏/了/请你/来/修一下'; const sentence1 = "这个/门把手/坏/了/请你/来/修一下";
const sentence2 = '快/把/手/拿开/这里/危险/不能/摸'; const sentence2 = "快/把/手/拿开/这里/危险/不能/摸";
if(Object.values(text).every(value => value !== '')){ if (Object.values(text).every((value) => value !== "")) {
if (setp == 1) { if (setp == 1) {
if(JSON.stringify(Object.values(text))===JSON.stringify(sentence1.split('/'))){ if (JSON.stringify(Object.values(text)) === JSON.stringify(sentence1.split("/"))) {
proxy.$modal.msgSuccess('分词成功'); proxy.$modal.msgSuccess("分词成功");
participleRecord.value=1 participleRecord.value = 1;
correctCount.value=1 correctCount.value = 1;
} else { } else {
proxy.$modal.msgWarning('分词错误,请重新输入'); proxy.$modal.msgWarning("分词错误,请重新输入");
errorCount.value++ errorCount.value++;
} }
} else { } else {
if(JSON.stringify(Object.values(text))===JSON.stringify(sentence2.split('/'))){ if (JSON.stringify(Object.values(text)) === JSON.stringify(sentence2.split("/"))) {
proxy.$modal.msgSuccess('分词成功'); proxy.$modal.msgSuccess("分词成功");
participleRecord.value=2 participleRecord.value = 2;
correctCount.value=2 correctCount.value = 2;
} else { } else {
proxy.$modal.msgWarning('分词错误,请重新输入') proxy.$modal.msgWarning("分词错误,请重新输入");
errorCount.value++ errorCount.value++;
} }
} }
} }
};
}
// //
const answer = ref({ const answer = ref({
correctAnswer: "A,B,C,D", correctAnswer: "A,B,C,D",
studentAnswer: [] studentAnswer: [],
}) });
const answer2 = ref({ const answer2 = ref({
correctAnswer: "A,B,D", correctAnswer: "A,B,D",
studentAnswer: [] studentAnswer: [],
}) });
// //
const answerChanged = (item, idx) => { const answerChanged = (item, idx) => {
if(idx==='1'){ if (idx === "1") {
if (participleRecord.value !== 2) { if (participleRecord.value !== 2) {
proxy.$modal.msgWarning('请先完成文本分詞'); proxy.$modal.msgWarning("请先完成文本分詞");
item.studentAnswer = []; item.studentAnswer = [];
return return;
} }
if (item.studentAnswer.length == 4) { if (item.studentAnswer.length == 4) {
correctCount.value=3 correctCount.value = 3;
proxy.$modal.msgSuccess('回答正确'); proxy.$modal.msgSuccess("回答正确");
} }
} else { } else {
if (answer.value.studentAnswer.length < 0) { if (answer.value.studentAnswer.length < 0) {
proxy.$modal.msgWarning('请先完成步骤一'); proxy.$modal.msgWarning("请先完成步骤一");
item.studentAnswer=[] item.studentAnswer = [];
return return;
} }
if (item.studentAnswer.length == 3) { if (item.studentAnswer.length == 3) {
if(item.studentAnswer.includes('A')&&item.studentAnswer.includes('B')&&item.studentAnswer.includes('D')){ if (item.studentAnswer.includes("A") && item.studentAnswer.includes("B") && item.studentAnswer.includes("D")) {
correctCount.value=4 correctCount.value = 4;
proxy.$modal.msgSuccess('回答正确'); proxy.$modal.msgSuccess("回答正确");
} else { } else {
proxy.$modal.msgWarning('回答错误'); proxy.$modal.msgWarning("回答错误");
let ErrorAnswer=item.studentAnswer.filter(item=>item!=='A'&&item!=='B'&&item!=='D') let ErrorAnswer = item.studentAnswer.filter((item) => item !== "A" && item !== "B" && item !== "D");
let index=item.studentAnswer.indexOf(ErrorAnswer[0]) let index = item.studentAnswer.indexOf(ErrorAnswer[0]);
item.studentAnswer=item.studentAnswer.splice(0,index) item.studentAnswer = item.studentAnswer.splice(0, index);
errorCount.value++ errorCount.value++;
}
} }
} }
} }
};
// //
const generateAbstract = () => { const generateAbstract = () => {
if (correctCount.value < 4) { if (correctCount.value < 4) {
proxy.$modal.msgWarning('请先完成步骤二'); proxy.$modal.msgWarning("请先完成步骤二");
return return;
} }
const test='生成式人工智能深刻影响人们生活的方方面面,当我们使用生成式人工智能高效搜索、生成文本、提高工作效率时,生成式人工智能的潜在风险也在不知不觉中逐渐渗透。生成式人工智能可处理海量数据,但也给知识产权保护、个人隐私保护、打击虚假信息等方面带来新挑战。积极推进人工智能治理,法治与社会教育是促进守正创新的两大抓手。一方面,营造安全有序的法治环境,规范生成式人工智能服务。同时,健全生成式人工智能系统出现问题时的法律责任和赔偿机制,另一方面,加强对公众的教育与培训也至关重要,强调伦理和法律约束,以提高对这些潜在风险的认识。' const test = "生成式人工智能深刻影响人们生活的方方面面,当我们使用生成式人工智能高效搜索、生成文本、提高工作效率时,生成式人工智能的潜在风险也在不知不觉中逐渐渗透。生成式人工智能可处理海量数据,但也给知识产权保护、个人隐私保护、打击虚假信息等方面带来新挑战。积极推进人工智能治理,法治与社会教育是促进守正创新的两大抓手。一方面,营造安全有序的法治环境,规范生成式人工智能服务。同时,健全生成式人工智能系统出现问题时的法律责任和赔偿机制,另一方面,加强对公众的教育与培训也至关重要,强调伦理和法律约束,以提高对这些潜在风险的认识。";
if(digest.value=='') return proxy.$modal.msgError('请输入摘要'); if (digest.value == "") return proxy.$modal.msgError("请输入摘要");
proxy.$modal.msgSuccess('提交成功'); proxy.$modal.msgSuccess("提交成功");
correctCount.value=5 correctCount.value = 5;
} };
// //
const generateAbstractAuto = () => { const generateAbstractAuto = () => {
if (correctCount.value < 5) { if (correctCount.value < 5) {
proxy.$modal.msgWarning('请先撰写100字以内的摘要再点击自动生成摘要进行对比!'); proxy.$modal.msgWarning("请先撰写100字以内的摘要再点击自动生成摘要进行对比!");
return return;
} }
commonality.getSummary({userId:'487'}).then(res => { commonality
.getSummary({ userId: "487" })
.then((res) => {
digest.value = res.msg; digest.value = res.msg;
proxy.$modal.msgSuccess('自动生成摘要'); proxy.$modal.msgSuccess("自动生成摘要");
}).catch(err => { })
errorCount++ .catch((err) => {
errorCount++;
}); });
} };
// //
const generateWordcloud = () => { const generateWordcloud = () => {
// if(correctCount.value<5) { // if(correctCount.value<5) {
// proxy.$modal.msgWarning(''); // proxy.$modal.msgWarning('');
// return // return
// } // }
commonality.creatWordCloud({userId:'487'}).then(res => { commonality.creatWordCloud({ userId: "487" }).then((res) => {
var blobUrl = URL.createObjectURL(res); var blobUrl = URL.createObjectURL(res);
document.querySelector('.right1').innerHTML = `<img src="${blobUrl}" alt="词云图" style="width: 100%; height: 304px;">`; document.querySelector(".right1").innerHTML = `<img src="${blobUrl}" alt="词云图" style="width: 100%; height: 304px;">`;
proxy.$modal.msgSuccess('生成词云图'); proxy.$modal.msgSuccess("生成词云图");
correctCount.value=6 correctCount.value = 6;
}); });
} };
const submit = () => { const submit = () => {
if (correctCount.value < 6) { if (correctCount.value < 6) {
proxy.$modal.msgWarning('请先完成所有步骤'); proxy.$modal.msgWarning("请先完成所有步骤");
return return;
} }
handleClose() handleClose();
console.log(errorCount.value, "errorCount.value"); console.log(errorCount.value, "errorCount.value");
commonality.submitTask({module:'人工智能',numberOfErrors:errorCount.value > 10 ? 10 : errorCount.value || 0,taskName:'自然语言处理',userId:JSON.parse(getUserInfo()).userId}).then((response) => { commonality
.submitTask({ module: "人工智能", numberOfErrors: errorCount.value > 10 ? 10 : errorCount.value || 0, taskName: "自然语言处理", userId: JSON.parse(getUserInfo()).userId })
.then((response) => {
proxy.$modal.msgSuccess("提交任务成功"); proxy.$modal.msgSuccess("提交任务成功");
NaturallanguageprocessingVisible.value=false NaturallanguageprocessingVisible.value = false;
restartStatus.value=false restartStatus.value = false;
}) })
.catch((error) => { .catch((error) => {});
}); };
}
// //
const restart = () => { const restart = () => {
correctCount.value=0 correctCount.value = 0;
participleRecord.value=0 participleRecord.value = 0;
digest.value='' digest.value = "";
restartStatus.value=true restartStatus.value = true;
text1.value = { text1.value = {
input1: "", input1: "",
input2: "", input2: "",
@ -412,8 +548,7 @@ const restart=()=>{
input5: "", input5: "",
input6: "", input6: "",
input7: "", input7: "",
};
}
text2.value = { text2.value = {
input1: "", input1: "",
input2: "", input2: "",
@ -423,99 +558,98 @@ text2.value = {
input6: "", input6: "",
input7: "", input7: "",
input8: "", input8: "",
};
} answer.value.studentAnswer = [];
answer.value.studentAnswer=[] answer2.value.studentAnswer = [];
answer2.value.studentAnswer=[] document.querySelector(".right1").innerHTML = "";
document.querySelector('.right1').innerHTML = '';
console.log(answer.value, "restartStatus.value"); console.log(answer.value, "restartStatus.value");
NaturallanguageprocessingVisible.value=false NaturallanguageprocessingVisible.value = false;
} };
// //
const handleClose = () => { const handleClose = () => {
const dataObj = { const dataObj = {
userId: JSON.parse(getUserInfo()).userId, userId: JSON.parse(getUserInfo()).userId,
stepOneA:Object.values(text1.value).join(',')||'', stepOneA: Object.values(text1.value).join(",") || "",
stepOneB:Object.values(text2.value).join(',')||'', stepOneB: Object.values(text2.value).join(",") || "",
stepOneC:answer.value.studentAnswer.join(',')||'', stepOneC: answer.value.studentAnswer.join(",") || "",
stepOneD:answer2.value.studentAnswer.join(',')||'', stepOneD: answer2.value.studentAnswer.join(",") || "",
textOne: digest.value, textOne: digest.value,
numberOfErrors: errorCount.value || 0, numberOfErrors: errorCount.value || 0,
subState:correctCount.value subState: correctCount.value,
} };
if(document.querySelector('.right1 img')!==null){ if (document.querySelector(".right1 img") !== null) {
dataObj.textThree=document.querySelector('.right1 img').src; dataObj.textThree = document.querySelector(".right1 img").src;
} }
NaturallanguageprocessingVisible.value=false NaturallanguageprocessingVisible.value = false;
if(restartStatus.value) return if (restartStatus.value) return;
commonality.saveNlp(dataObj).then((response) => { commonality
}) .saveNlp(dataObj)
.catch((error) => { .then((response) => {})
}); .catch((error) => {});
} };
const getList = () => { const getList = () => {
commonality.getNlpEcho({userId:JSON.parse(getUserInfo()).userId}).then((response) => { commonality
if(restartStatus.value) return .getNlpEcho({ userId: JSON.parse(getUserInfo()).userId })
.then((response) => {
if (restartStatus.value) return;
if (response.data) { if (response.data) {
const data=response.data const data = response.data;
if (data.stepOneA) { if (data.stepOneA) {
participleRecord.value=1 participleRecord.value = 1;
} else if (data.stepOneB) { } else if (data.stepOneB) {
participleRecord.value=2 participleRecord.value = 2;
} }
if (data.stepOneC) { if (data.stepOneC) {
correctCount.value=3 correctCount.value = 3;
} }
if (data.stepOneD) { if (data.stepOneD) {
correctCount.value=4 correctCount.value = 4;
} }
if (data.textOne) { if (data.textOne) {
correctCount.value=5 correctCount.value = 5;
} }
if (data.textThree) { if (data.textThree) {
correctCount.value=6 correctCount.value = 6;
} }
errorCount.value=data.numberOfErrors || 0 errorCount.value = data.numberOfErrors || 0;
text1.value = { text1.value = {
input1: data.stepOneA.split(',')[0], input1: data.stepOneA.split(",")[0],
input2: data.stepOneA.split(',')[1], input2: data.stepOneA.split(",")[1],
input3: data.stepOneA.split(',')[2], input3: data.stepOneA.split(",")[2],
input4: data.stepOneA.split(',')[3], input4: data.stepOneA.split(",")[3],
input5: data.stepOneA.split(',')[4], input5: data.stepOneA.split(",")[4],
input6: data.stepOneA.split(',')[5], input6: data.stepOneA.split(",")[5],
input7: data.stepOneA.split(',')[6], input7: data.stepOneA.split(",")[6],
} };
text2.value = { text2.value = {
input1: data.stepOneB.split(',')[0], input1: data.stepOneB.split(",")[0],
input2: data.stepOneB.split(',')[1], input2: data.stepOneB.split(",")[1],
input3: data.stepOneB.split(',')[2], input3: data.stepOneB.split(",")[2],
input4: data.stepOneB.split(',')[3], input4: data.stepOneB.split(",")[3],
input5: data.stepOneB.split(',')[4], input5: data.stepOneB.split(",")[4],
input6: data.stepOneB.split(',')[5], input6: data.stepOneB.split(",")[5],
input7: data.stepOneB.split(',')[6], input7: data.stepOneB.split(",")[6],
input8: data.stepOneB.split(',')[7], input8: data.stepOneB.split(",")[7],
} };
answer.value.studentAnswer=data.stepOneC.split(',') answer.value.studentAnswer = data.stepOneC.split(",");
answer2.value.studentAnswer=data.stepOneD.split(',') answer2.value.studentAnswer = data.stepOneD.split(",");
digest.value=data.textOne digest.value = data.textOne;
correctCount.value=data.subState correctCount.value = data.subState;
console.log(correctCount.value, "correctCount.value"); console.log(correctCount.value, "correctCount.value");
var blobUrl = URL.createObjectURL(data.textThree); var blobUrl = URL.createObjectURL(data.textThree);
document.querySelector('.right1').innerHTML = `<img src="${blobUrl}" alt="词云图" style="width: 100%; height: 304px;">`; document.querySelector(".right1").innerHTML = `<img src="${blobUrl}" alt="词云图" style="width: 100%; height: 304px;">`;
} }
}) })
.catch((error) => { .catch((error) => {});
}); };
getList();
}
getList()
// //
onBeforeUnmount(() => { onBeforeUnmount(() => {
handleClose() handleClose();
}) });
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.Naturallanguageprocessing { .Naturallanguageprocessing {
display: flex; display: flex;
@ -551,7 +685,7 @@ onBeforeUnmount(()=>{
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
font-weight: bold; font-weight: bold;
font-size: 20px; font-size: 20px;
color: #FFFFFF; color: #ffffff;
} }
} }
.gdialog { .gdialog {
@ -565,7 +699,7 @@ onBeforeUnmount(()=>{
height: 25px; height: 25px;
line-height: 25px; line-height: 25px;
text-align: center; text-align: center;
background: #5621F8; background: #5621f8;
border-radius: 12px; border-radius: 12px;
margin-right: 8px; margin-right: 8px;
span { span {
@ -573,12 +707,12 @@ onBeforeUnmount(()=>{
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
font-weight: bold; font-weight: bold;
font-size: 12px; font-size: 12px;
color:#FFFFFF; color: #ffffff;
} }
} }
span { span {
font-size: 15px; font-size: 15px;
color: #FFFFFF; color: #ffffff;
font-weight: 600; font-weight: 600;
} }
} }
@ -587,7 +721,7 @@ onBeforeUnmount(()=>{
p { p {
width: calc(100% - 30%); width: calc(100% - 30%);
// height: 36px; // height: 36px;
background: #E9EBFC; background: #e9ebfc;
border-radius: 4px; border-radius: 4px;
padding: 0px 21px; padding: 0px 21px;
.el-checkbox { .el-checkbox {
@ -597,19 +731,18 @@ onBeforeUnmount(()=>{
.Abstract { .Abstract {
width: calc(100% - 10%); width: calc(100% - 10%);
// height: 543px; // height: 543px;
background: #F7F7F7; background: #f7f7f7;
border-radius: 4px; border-radius: 4px;
border: 1px solid #DCDCDC; border: 1px solid #dcdcdc;
padding: 19px 19px 21px 19px; padding: 19px 19px 21px 19px;
margin-bottom: 20px; margin-bottom: 20px;
.texts { .texts {
width: calc(100% - 20px); width: calc(100% - 20px);
// height: 317px; // height: 317px;
padding: 16px 33px 49px 19px; padding: 16px 33px 49px 19px;
background: #FFFFFF; background: #ffffff;
border-radius: 5px; border-radius: 5px;
border: 1px solid #E5E5E5; border: 1px solid #e5e5e5;
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
font-weight: 500; font-weight: 500;
font-size: 12px; font-size: 12px;
@ -644,7 +777,7 @@ onBeforeUnmount(()=>{
height: 40px; height: 40px;
border: none; border: none;
padding: 12px 40px !important; padding: 12px 40px !important;
background: url("@s/assets/images/szjj/提交任务.png") no-repeat; background: url("@/assets/images/szjj/提交任务.png") no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
@ -659,13 +792,10 @@ onBeforeUnmount(()=>{
.el-scrollbar { .el-scrollbar {
// height: 300px; // height: 300px;
} }
} }
} }
:deep(.el-textarea__inner) { :deep(.el-textarea__inner) {
height: 124px !important; height: 124px !important;
} }
.dialog-footer { .dialog-footer {
margin-top: 5px; margin-top: 5px;

@ -2,12 +2,12 @@
* @Author: qinzhenpen qzp1807@126.com * @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-20 17:50:08 * @Date: 2024-08-20 17:50:08
* @LastEditors: qinzhenpen qzp1807@126.com * @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 17:25:35 * @LastEditTime: 2024-08-22 17:12:34
* @FilePath: \vue3\src\views\digitalMarketTech\index.vue * @FilePath: \vue3\src\views\digitalMarketTech\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
<template> <template>
<div class="rgzn_top app-container2"> <div class="rgzn_top app-container">
<div class="top_item"> <div class="top_item">
<el-button :class="{ active: isActive === 1 }" @click="activeIndex(1)"> <el-button :class="{ active: isActive === 1 }" @click="activeIndex(1)">
<img src="@/assets/images/大数据.png" /> <img src="@/assets/images/大数据.png" />

@ -2,7 +2,7 @@
<!-- <el-scrollbar ref="scrollbar" height="800px"> --> <!-- <el-scrollbar ref="scrollbar" height="800px"> -->
<div class="main-top"> <div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p> <p style="font-weight: 400; font-size: 12px; color: #e2e7ee !important">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
</div> </div>
<div class="main-but"> <div class="main-but">
<el-button @click="runResultShow = true"> <el-button @click="runResultShow = true">

@ -60,7 +60,7 @@ const n_dataTableQuery = ref({
}); });
const datatotal = ref(0); const datatotal = ref(0);
const nzIndex = ref(0); const nzIndex = ref(0);
const nzData = ["用户属性表", "用户登录活跃表", "用户消费能力表", "用户行为表", "用户评论表"]; const nzData = ref([]);
const zjIndex = ref(-1); const zjIndex = ref(-1);
const zjData = ref([]); const zjData = ref([]);
const tableLabel = ref([ const tableLabel = ref([
@ -77,6 +77,7 @@ const tableLabel = ref([
{ prop: "updateTime", label: "注册时间" }, { prop: "updateTime", label: "注册时间" },
{ prop: "location", label: "所在地" }, { prop: "location", label: "所在地" },
]); ]);
const tableLabel2 = ref([]); const tableLabel2 = ref([]);
const arrhander = ref([]); const arrhander = ref([]);
const arrhanderkey = ref([]); const arrhanderkey = ref([]);
@ -119,9 +120,11 @@ const selectType = (type) => {
}; };
const getSurface = () => { const getSurface = () => {
loading.value = true; loading.value = true;
portraitModel.getUserTableData(n_dataTableQuery.value).then((res) => { portraitModel
tableData.value = res?.data?.list .getUserTableData(n_dataTableQuery.value)
datatotal.value = res?.data?.total .then((res) => {
tableData.value = res?.data?.list;
datatotal.value = res?.data?.total;
tableLabel2.value = []; tableLabel2.value = [];
if (tableData.value[0]?.stepOneA) { if (tableData.value[0]?.stepOneA) {
arrhander.value = JSON.parse(tableData.value[0].stepOneA); arrhander.value = JSON.parse(tableData.value[0].stepOneA);
@ -136,11 +139,12 @@ const getSurface = () => {
} }
setTimeout(() => { setTimeout(() => {
loading.value = false; loading.value = false;
},1000) }, 1000);
}).catch(err=>{
loading.value = false;
tableData.value=[]
}) })
.catch((err) => {
loading.value = false;
tableData.value = [];
});
}; };
// //
const importData = (e) => { const importData = (e) => {
@ -157,7 +161,10 @@ const importData = (e) => {
}; };
// //
const selectZJ = (item) => { const selectZJ = (item) => {
marketingAlgorithmApi.getMarketingAlgorithmTable(); portraitModel.getUserTableInfo({ userId: userInfo.userId }).then((res) => {
nzData.value = res.data.tableNames;
algorithmStore.userDataLabel = [...res?.data.tableNames, ...res.data.selfBuiltTable];
});
}; };
// //
const getZJData = () => { const getZJData = () => {
@ -166,6 +173,7 @@ const getZJData = () => {
}); });
}; };
onMounted(() => { onMounted(() => {
selectZJ();
getSurface(); getSurface();
getZJData(); getZJData();
}); });

@ -273,7 +273,6 @@
<script setup> <script setup>
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import popModel from "@/views/components/popModal.vue"; import popModel from "@/views/components/popModal.vue";
import { htmlPdf } from "@/utils/pdf.js"; import { htmlPdf } from "@/utils/pdf.js";
import * as echarts from "echarts"; import * as echarts from "echarts";
@ -312,7 +311,6 @@ const task = () => {
dialogVisible.value = false; dialogVisible.value = false;
proxy.$modal.msgSuccess("提交成功"); proxy.$modal.msgSuccess("提交成功");
}); });
}; };
const algorithmicKnowledge = () => { const algorithmicKnowledge = () => {
runResultShow.value = true; runResultShow.value = true;
@ -513,7 +511,7 @@ const optionData2 = () => {
proxy.$modal.msgSuccess("预处理成功!"); proxy.$modal.msgSuccess("预处理成功!");
}); });
} }
} };
const showChart = ref(false); const showChart = ref(false);
// //
const nowData = ref([]); const nowData = ref([]);
@ -654,7 +652,6 @@ const optionData2 = () => {
const pdfBlob = await htmlPdf(fileName, document.querySelector("#pdfRef"), fileList, true); const pdfBlob = await htmlPdf(fileName, document.querySelector("#pdfRef"), fileList, true);
return pdfBlob; return pdfBlob;
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

@ -1,7 +1,7 @@
<template> <template>
<div class="main-top"> <div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p> <p style="font-weight: 400; font-size: 12px; color: #e2e7ee !important">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
</div> </div>
<div class="main-but"> <div class="main-but">
<el-button @click="knowledgeImport"> <el-button @click="knowledgeImport">
@ -70,7 +70,11 @@
<div> <div>
<span style="font-weight: bold; font-size: 18px; color: #3596eb">分析数据</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb">分析数据</span>
<el-table :data="analysisData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle"> <el-table :data="analysisData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle">
<el-table-column v-for="column in analysisHanderKry" :key="column" :prop="column" :label="column" align="center" /> <el-table-column v-for="column in analysisHanderKry" :key="column" :prop="column" :label="column" align="center">
<template #default="scope">
<span>{{ scope.row[column] ?? "..." }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<pagination v-show="n_analyzeTheNumberOfDataItems > 0" :total="n_analyzeTheNumberOfDataItems" v-model:page="n_dataTableQuery.index" v-model:limit="n_dataTableQuery.size" @pagination="analyzeDataNext" /> <pagination v-show="n_analyzeTheNumberOfDataItems > 0" :total="n_analyzeTheNumberOfDataItems" v-model:page="n_dataTableQuery.index" v-model:limit="n_dataTableQuery.size" @pagination="analyzeDataNext" />
</div> </div>
@ -78,7 +82,11 @@
<span style="font-weight: bold; font-size: 18px; color: #3596eb; display: block">分析结果</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb; display: block">分析结果</span>
<el-button @click="download"></el-button> <el-button @click="download"></el-button>
<el-table :data="tableData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350" v-loading="loading"> <el-table :data="tableData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350" v-loading="loading">
<el-table-column v-for="column in tableLabel" :key="column.label" :prop="column.prop" :label="column.label" align="center"></el-table-column> <el-table-column v-for="column in tableLabel" :key="column.label" :prop="column.prop" :label="column.label" align="center">
<template #default="scope">
<span>{{ scope.row[column.prop] ?? "..." }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<pagination v-show="nNumberOfAnalysisResults > 0" :total="nNumberOfAnalysisResults" v-model:page="gAnalysisResults.index" v-model:limit="gAnalysisResults.size" @pagination="updatePageAnalysisResults" /> <pagination v-show="nNumberOfAnalysisResults > 0" :total="nNumberOfAnalysisResults" v-model:page="gAnalysisResults.index" v-model:limit="gAnalysisResults.size" @pagination="updatePageAnalysisResults" />
</div> </div>
@ -428,7 +436,7 @@ function processArrayData(keys, data) {
// //
keys.forEach((key) => { keys.forEach((key) => {
// data // data
const values = data.map((item) => item[key]); const values = data.map((item) => item[key] ?? "0");
// //
result[key] = values; result[key] = values;
}); });
@ -484,14 +492,14 @@ const restart = () => {
observations: "", observations: "",
}; };
analysisData.value = []; analysisData.value = [];
analysisHanderKry.value = []; analysisHanderKry.value = [""];
tableData.value = []; tableData.value = [];
g_indicatorData.value = []; g_indicatorData.value = [];
g_modelParameter.value = []; g_modelParameter.value = [];
preProcessText.value.text2 = ""; preProcessText.value.text2 = "";
n_dataTableQuery.value.tableName = "用户属性表"; n_dataTableQuery.value.tableName = "用户属性表";
getIndicator(); getIndicator();
proxy.$modal.msgSuccess("重新开始成功"); proxy.$modal.msgSuccess("重新开始!");
multipleTableRef.value.clearSelection(); multipleTableRef.value.clearSelection();
}; };
// //

@ -1,7 +1,7 @@
<template> <template>
<div class="main-top"> <div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p> <p style="font-weight: 400; font-size: 12px; color: #e2e7ee !important">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
</div> </div>
<div class="main-but"> <div class="main-but">
<el-button @click="knowledgeImport"> <el-button @click="knowledgeImport">
@ -21,7 +21,7 @@
</div> </div>
<div class="metrics"> <div class="metrics">
<el-select v-model="n_dataTableQuery.tableName" placeholder="请选择数据" style="width: 180px" @change="selectType"> <el-select v-model="n_dataTableQuery.tableName" placeholder="请选择数据" style="width: 180px" @change="selectType">
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" /> <el-option v-for="item in algorithmStore.userDataLabel2" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="metrics-table" style="margin-top: 10px"> <div class="metrics-table" style="margin-top: 10px">
@ -107,15 +107,15 @@
<div class="div" v-if="preProcessText.text3 == '词云生成'"> <div class="div" v-if="preProcessText.text3 == '词云生成'">
<div id="mywordcloud_positive" style="width: 50%; height: 600px"></div> <div id="mywordcloud_positive" style="width: 50%; height: 600px"></div>
</div> </div>
<div ref="captureElement" v-if="preProcessText.text3 == '情感倾向分析' && n_emotiveTendency == 0 ? true : g_emotionAnalysis"> <div ref="captureElement" v-if="preProcessText.text3 == '情感倾向分析' && n_emotiveTendency == 0 ? true : n_emotiveTendency">
<div class="emotion_analysis"> <div class="emotion_analysis">
<div class="emotion_analysis-ani-in-le"> <div class="emotion_analysis-ani-in-le">
<span>正向情感</span> <span>正向情感</span>
<img src="../../../assets/images/笑脸.png" alt="" /> <img src="../../../assets/images/笑脸.png" alt="" />
</div> </div>
<el-progress style="width: 480px" :text-inside="true" :stroke-width="20" :percentage="n_emotiveTendency" :color="'#ff540a'" /> <el-progress :class="[g_emotionAnalysis == 0 ? 'negPercentage ' : '']" style="width: 480px" :text-inside="true" :stroke-width="20" :percentage="n_emotiveTendency" :color="'#ff540a'" />
<div class="emotion_analysis-ani-in-ri"> <div class="emotion_analysis-ani-in-ri">
<img src="" alt="" /> <img src="../../../assets/images/哭脸.png" alt="" />
<span>负向情感</span> <span>负向情感</span>
</div> </div>
<div class="emotion_analysis_title">{{ g_emotionAnalysis == 0 ? "情感偏负向" : g_emotionAnalysis == 1 ? "情感偏中性" : "情感偏正向" }}</div> <div class="emotion_analysis_title">{{ g_emotionAnalysis == 0 ? "情感偏负向" : g_emotionAnalysis == 1 ? "情感偏中性" : "情感偏正向" }}</div>
@ -162,7 +162,7 @@
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-form-item label="情感倾向分析: " label-width="120px"> <el-form-item label="情感倾向分析: " label-width="120px">
<el-radio-group v-model="formInline.emotional" style="margin-left: 31px"> <el-radio-group v-model="formInline.emotional" style="margin-left: 31px" fill="red" text-color="#ffffff">
<el-radio value="1" label="正向" size="large"></el-radio> <el-radio value="1" label="正向" size="large"></el-radio>
<el-radio value="2" label="负向" size="large"></el-radio> <el-radio value="2" label="负向" size="large"></el-radio>
</el-radio-group> </el-radio-group>
@ -184,7 +184,7 @@
<popModel :showModel="b_algorithmKnowledge" title="情感分析" @closePop="b_algorithmKnowledge = false"> <popModel :showModel="b_algorithmKnowledge" title="情感分析" @closePop="b_algorithmKnowledge = false">
<template v-slot:content> <template v-slot:content>
<!-- 情感分析 --> <!-- 情感分析 -->
<div> <div style="color: #000000 !important">
<p style="font-weight: 700; font-size: 22px">总览</p> <p style="font-weight: 700; font-size: 22px">总览</p>
<p> <p>
文本分析指对文本数据进行表示 (representation)处理(processing)和建模(modeling)来获得有用的见解(insight) 文本分析指对文本数据进行表示 (representation)处理(processing)和建模(modeling)来获得有用的见解(insight)
@ -413,7 +413,6 @@
</template> </template>
<script setup> <script setup>
import popModel from "@/views/components/popModal.vue"; import popModel from "@/views/components/popModal.vue";
import { paginate } from "@/utils/index.js"; import { paginate } from "@/utils/index.js";
import * as echarts from "echarts"; import * as echarts from "echarts";
import * as XLSX from "XLSX"; import * as XLSX from "XLSX";
@ -424,7 +423,6 @@ import * as API from "@/api/AI.js";
import * as marketingAlgorithmApi from "@/api/marketing-algorithm.js"; import * as marketingAlgorithmApi from "@/api/marketing-algorithm.js";
import html2canvas from "html2canvas"; import html2canvas from "html2canvas";
import useAlgorithmStore from "@/store/modules/algorithm.js"; import useAlgorithmStore from "@/store/modules/algorithm.js";
import useUserStore from "@/store/modules/user";
import { getUserInfo } from "@/utils/auth"; import { getUserInfo } from "@/utils/auth";
// //
const b_algorithmKnowledge = ref(false); const b_algorithmKnowledge = ref(false);
@ -434,7 +432,6 @@ const loading2 = ref(false);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const algorithmStore = useAlgorithmStore(); const algorithmStore = useAlgorithmStore();
const multipleTableRef = ref(null); const multipleTableRef = ref(null);
const b_introductionOfAlgorithmKnowledge = ref(false);
const n_dataTableQuery = ref({ const n_dataTableQuery = ref({
index: 1, index: 1,
size: 5, size: 5,
@ -487,7 +484,6 @@ const preProcessText = ref({
const aOriginalDataOfAnalysisResults2 = ref({}); const aOriginalDataOfAnalysisResults2 = ref({});
const nOriginalWordFrequency = ref([]); // const nOriginalWordFrequency = ref([]); //
const nOriginalWordFrequencyNum = ref(0); // const nOriginalWordFrequencyNum = ref(0); //
const nOriginalWordFrequencySearch = ref([]); //
const mWordFrequency = ref({ const mWordFrequency = ref({
index: 1, index: 1,
size: 10, size: 10,
@ -498,10 +494,13 @@ const mWordFrequency = ref({
// //
const g_analyzeTheNumberOfDataItems = ref(""); const g_analyzeTheNumberOfDataItems = ref("");
// //
const g_modelParameter = ref([]);
const n_emotiveTendency = ref(0); const n_emotiveTendency = ref(0);
const g_emotionAnalysis = ref(0); const g_emotionAnalysis = ref(0);
const aCommentOpinion = ref([]); const aCommentOpinion = ref([]);
//
const downloadStatus = ref(false);
//
// //
const preProcess = (tetx) => { const preProcess = (tetx) => {
if (g_indicatorData.value.length == 0) { if (g_indicatorData.value.length == 0) {
@ -523,7 +522,6 @@ const preProcess = (tetx) => {
const taskSubmit = () => { const taskSubmit = () => {
dialogVisible.value = true; dialogVisible.value = true;
}; };
const tableData = ref([]);
const headerCellStyle = () => { const headerCellStyle = () => {
return { return {
backgroundColor: "#1882DE !important", // backgroundColor: "#1882DE !important", //
@ -544,47 +542,25 @@ const submit = () => {
if (g_indicatorData.value.length == 0) return proxy.$modal.msgWarning("请选择指标"); if (g_indicatorData.value.length == 0) return proxy.$modal.msgWarning("请选择指标");
loading.value = true; loading.value = true;
marketingAlgorithmApi.getMarketingAlgorithm({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName, fieldList: g_indicatorData.value }).then((res) => { marketingAlgorithmApi.getMarketingAlgorithm({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName, fieldList: g_indicatorData.value }).then((res) => {
// g_analyzeTheNumberOfDataItems.value =
if (
res.data
.map((item) => (item ? item.text : ""))
.every((item) => {
return item !== "";
})
) {
g_analyzeTheNumberOfDataItems.value = res.data.map((item) => (item ? item.text : "")).join(","); g_analyzeTheNumberOfDataItems.value = res.data.map((item) => (item ? item.text : "")).join(",");
analysisData.value = res.data.filter((item) => item !== null); } else {
g_analyzeTheNumberOfDataItems.value = "";
loading.value = false; loading.value = false;
proxy.$modal.msgSuccess("分析数据成功");
});
};
//
const handlemodelSelectionChange = (type) => {
g_modelParameter.value = type.map((item) => item.name);
};
//
const modelCalculation = () => {
if (analysisData.value.length == 0 && g_modelParameter.value.length == 0) {
proxy.$modal.msgWarning("请先分析数据/未选择模型参数!");
return; return;
} }
const processedData = processArrayData(["text"], analysisData.value); analysisData.value = res.data.filter((item) => item !== null);
marketingAlgorithmApi.getMarketingAlgorithmPreprocessing(JSON.stringify({ map: processedData, statistic: [preProcessText.value.text3 == "词云生成" ? "词频分析" : preProcessText.value.text3], userId: n_dataTableQuery.value.userId })).then((res) => { loading.value = false;
aOriginalDataOfAnalysisResults2.value = res.data; proxy.$modal.msgSuccess("分析数据成功");
tableData.value = res.data.map((item) => item.statistics);
if (res.data.length > 5) {
nNumberOfAnalysisResults.value = res.data.length;
aOriginalDataOfAnalysisResults.value = res.data.map((item) => item.statistics);
tableData.value = res.data.map((item) => item.statistics).slice(0, 5);
}
}); });
}; };
function processArrayData(keys, data) {
//
const result = {};
//
keys.forEach((key) => {
// data
const values = data.map((item) => item[key]);
//
result[key] = values;
});
return result;
}
onMounted(() => { onMounted(() => {
getIndicator(); getIndicator();
}); });
@ -620,35 +596,42 @@ const submitTask = () => {
const restart = () => { const restart = () => {
// //
formInline.value = { formInline.value = {
average: "",
median: "",
mode: "",
standardDeviation: "",
variance: "",
standardError: "",
kurtosis: "",
skewness: "",
max: "", max: "",
min: "", frequency: "",
summation: "", text1: "",
observations: "", text2: "",
emotional: "",
prominent: "",
}; };
analysisData.value = []; analysisData.value = [];
g_analyzeTheNumberOfDataItems.value = "";
analysisHanderKry.value = []; analysisHanderKry.value = [];
tableData.value = [];
g_indicatorData.value = []; g_indicatorData.value = [];
g_modelParameter.value = []; preProcessText.value = {
preProcessText.value.text2 = ""; text1: "数据去重",
n_dataTableQuery.value.tableName = "用户属性表"; text2: "",
getIndicator(); text3: "",
proxy.$modal.msgSuccess("重新开始成功"); };
aOriginalDataOfAnalysisResults2.value = {};
mWordFrequency.value = {
index: 1,
size: 10,
namenum: "",
frequency: "",
};
n_emotiveTendency.value = 0;
aCommentOpinion.value = [];
nOriginalWordFrequencyNum.value = 0;
aWordFrequency.value = [];
nOriginalWordFrequency.value = [];
s_commentType.value = "";
proxy.$modal.msgSuccess("重新开始!");
multipleTableRef.value.clearSelection(); multipleTableRef.value.clearSelection();
}; };
const captureElement = ref(null); const captureElement = ref(null);
// //
const download = async () => { const download = async () => {
// let tableData = ["", ""]; if (!downloadStatus.value) return proxy.$modal.msgWarning("请先分析数据!");
// XLSX.utils.aoa_to_sheet(tableData);
if (preProcessText.value.text3 == "情感倾向分析" || preProcessText.value.text3 == "评论观点抽取") { if (preProcessText.value.text3 == "情感倾向分析" || preProcessText.value.text3 == "评论观点抽取") {
if (captureElement.value) { if (captureElement.value) {
try { try {
@ -703,6 +686,33 @@ const sentimentAnalysis = () => {
} }
if (g_analyzeTheNumberOfDataItems.value == "") return proxy.$modal.msgWarning("请先选择指标/手动输入进行情感分析!"); if (g_analyzeTheNumberOfDataItems.value == "") return proxy.$modal.msgWarning("请先选择指标/手动输入进行情感分析!");
loading.value = true; loading.value = true;
if (preProcessText.value.text3 === "情感倾向分析") {
marketingAlgorithmApi
.getMarketingAlgorithmSentimentAnalysis(JSON.stringify({ text: g_analyzeTheNumberOfDataItems.value }))
.then((res) => {
g_emotionAnalysisinfo = res.data;
const pos = parseFloat(g_emotionAnalysisinfo.pos);
const neg = parseFloat(g_emotionAnalysisinfo.neg);
const total = pos + neg;
const posPercentage = total !== 0 ? (pos / total) * 100 : 0;
const negPercentage = total !== 0 ? (neg / total) * 100 : 0;
if (posPercentage > negPercentage) {
g_emotionAnalysis.value = 2;
n_emotiveTendency.value = posPercentage;
} else if (negPercentage > posPercentage) {
g_emotionAnalysis.value = 0;
n_emotiveTendency.value = negPercentage;
}
if (posPercentage == negPercentage) {
g_emotionAnalysis.value = 1;
n_emotiveTendency.value = 50;
}
loading.value = false;
})
.catch((err) => {
loading.value = false;
});
} else {
marketingAlgorithmApi marketingAlgorithmApi
.getMarketingAlgorithmSentiment({ id: s_commentType.value, userId: n_dataTableQuery.value.userId, content: g_analyzeTheNumberOfDataItems.value, modelType: preProcessText.value.text3 == "词云生成" ? "词频分析" : preProcessText.value.text3 }) .getMarketingAlgorithmSentiment({ id: s_commentType.value, userId: n_dataTableQuery.value.userId, content: g_analyzeTheNumberOfDataItems.value, modelType: preProcessText.value.text3 == "词云生成" ? "词频分析" : preProcessText.value.text3 })
.then((res) => { .then((res) => {
@ -713,11 +723,6 @@ const sentimentAnalysis = () => {
nOriginalWordFrequency.value = res.data; nOriginalWordFrequency.value = res.data;
aWordFrequency.value = res.data.slice(0, 5); aWordFrequency.value = res.data.slice(0, 5);
nOriginalWordFrequencyNum.value = res.data.length; nOriginalWordFrequencyNum.value = res.data.length;
} else if (preProcessText.value.text3 === "情感倾向分析") {
g_emotionAnalysisinfo = JSON.parse(res.data);
g_emotionAnalysis.value = JSON.parse(res.data)?.items[0]?.sentiment;
n_emotiveTendency.value = Math.round(g_emotionAnalysisinfo.items[0].positive_prob * 100);
console.log(n_emotiveTendency.value, " n_emotiveTendency.value");
} else { } else {
aCommentOpinion.value = JSON.parse(res.data).items.reduce((groups, item) => { aCommentOpinion.value = JSON.parse(res.data).items.reduce((groups, item) => {
// sentiment // sentiment
@ -729,15 +734,18 @@ const sentimentAnalysis = () => {
return groups; return groups;
}, {}); }, {});
} }
downloadStatus.value = true;
loading.value = false; loading.value = false;
proxy.$modal.msgSuccess("分析成功"); proxy.$modal.msgSuccess("分析成功");
}) })
.catch((err) => { .catch((err) => {
loading.value = false; loading.value = false;
}); });
}
}; };
// //
const clear = () => { const clear = () => {
if (!g_analyzeTheNumberOfDataItems.value) return proxy.$modal.msgWarning("请先分析数据!");
g_analyzeTheNumberOfDataItems.value = ""; g_analyzeTheNumberOfDataItems.value = "";
aWordFrequency.value = []; aWordFrequency.value = [];
proxy.$modal.msgSuccess("清空成功"); proxy.$modal.msgSuccess("清空成功");
@ -966,6 +974,24 @@ const switchingModels = () => {
.footer { .footer {
padding-top: 20px; padding-top: 20px;
text-align: center; text-align: center;
.el-button {
width: 110px;
height: 31px;
color: #333333;
border: none;
//
&:focus {
outline: none;
}
}
.el-button:nth-child(1) {
background: url("../../../assets/images/情感分析.png") no-repeat;
background-size: 100% 100%;
}
.el-button:nth-child(2) {
background: url("../../../assets/images/取消.png") no-repeat;
background-size: 100% 100%;
}
} }
} }
.metrics, .metrics,
@ -1055,9 +1081,17 @@ const switchingModels = () => {
font-size: 24px; font-size: 24px;
font-weight: normal; font-weight: normal;
} }
:deep(.el-progress) {
position: relative;
}
:deep(.el-progress-bar__outer) { :deep(.el-progress-bar__outer) {
background-color: #036fe2; background-color: #036fe2;
} }
:deep(.negPercentage) {
.el-progress-bar__inner {
background-color: #036fe2 !important;
}
}
} }
.comment-opinion { .comment-opinion {
padding: 30px 20px 0px 90px !important; padding: 30px 20px 0px 90px !important;
@ -1152,8 +1186,8 @@ const switchingModels = () => {
} }
h4, h4,
p { p {
color: #ffffff !important; // color: #ffffff !important;
font-size: 14px; // font-size: 14px;
} }
:deep(.pagination-container .el-pagination) { :deep(.pagination-container .el-pagination) {
// //
@ -1164,4 +1198,22 @@ p {
flex-wrap: nowrap !important; flex-wrap: nowrap !important;
} }
} }
:deep(.el-radio-group) {
//
.is-checked.el-radio__label {
color: #ffffff !important;
}
.el-radio__input.is-checked .el-radio__inner {
background: #2d5c8f !important;
border-color: #2d5c8f !important;
}
.el-radio__label {
color: #ffffff !important;
}
.el-radio__input .el-radio__inner {
background: #2d5c8f !important;
border-color: #2d5c8f !important;
border-color: #6fa8de !important;
}
}
</style> </style>

@ -2,7 +2,7 @@
<!-- <el-scrollbar ref="scrollbar" height="800px"> --> <!-- <el-scrollbar ref="scrollbar" height="800px"> -->
<div class="main-top"> <div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span> <span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p> <p style="font-weight: 400; font-size: 12px; color: #e2e7ee !important">给出任务清单参考做哪些数据的统计分析Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
</div> </div>
<div class="main-but"> <div class="main-but">
<el-button @click="runResultShow = true"> <el-button @click="runResultShow = true">

@ -36,9 +36,9 @@
import { getCodeImg } from "@/api/login"; import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt"; import { encrypt, decrypt } from "@/utils/jsencrypt";
import useUserStore from '@/store/modules/user' import useUserStore from "@/store/modules/user";
const userStore = useUserStore() const userStore = useUserStore();
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
@ -48,13 +48,13 @@ const loginForm = ref({
password: "", password: "",
rememberMe: false, rememberMe: false,
code: "", code: "",
uuid: "" uuid: "",
}); });
const loginRules = { const loginRules = {
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }], username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }], password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
code: [{ required: true, trigger: "change", message: "请输入验证码" }] code: [{ required: true, trigger: "change", message: "请输入验证码" }],
}; };
const codeUrl = ref(""); const codeUrl = ref("");
@ -65,9 +65,13 @@ const captchaEnabled = ref(true);
const register = ref(false); const register = ref(false);
const redirect = ref(undefined); const redirect = ref(undefined);
watch(route, (newRoute) => { watch(
route,
(newRoute) => {
redirect.value = newRoute.query && newRoute.query.redirect; redirect.value = newRoute.query && newRoute.query.redirect;
}, { immediate: true }); },
{ immediate: true }
);
function handleLogin() { function handleLogin() {
// proxy.$refs.loginRef.validate(valid => { // proxy.$refs.loginRef.validate(valid => {
@ -87,13 +91,13 @@ function handleLogin() {
// //
const params = { const params = {
username: loginForm.value.username, username: loginForm.value.username,
password: loginForm.value.password !== '' ? encrypt(loginForm.value.password) : loginForm.value.password, password: loginForm.value.password !== "" ? encrypt(loginForm.value.password) : loginForm.value.password,
token: loginForm.value.TOKEN, token: loginForm.value.TOKEN,
}; };
userStore userStore
.login(params) .login(params)
.then(res => { .then((res) => {
router.push({ path: redirect.value || '/index' }); router.push({ path: redirect.value || "/index" });
if (params.token) { if (params.token) {
setTimeout(() => { setTimeout(() => {
loading.value = false; loading.value = false;
@ -101,7 +105,8 @@ function handleLogin() {
} else { } else {
loading.value = false; loading.value = false;
} }
}).catch(() => { })
.catch(() => {
loading.value = false; loading.value = false;
}); });
// } // }
@ -125,7 +130,7 @@ function getCookie() {
loginForm.value = { loginForm.value = {
username: username === undefined ? loginForm.value.username : username, username: username === undefined ? loginForm.value.username : username,
password: password === undefined ? loginForm.value.password : decrypt(password), password: password === undefined ? loginForm.value.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
}; };
} }
@ -133,13 +138,13 @@ function getCookie() {
getCookie(); getCookie();
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.login { .login {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-image: url('@/assets/images/login-background.0dded3b4.webp'); background-image: url("@/assets/images/login-background.0dded3b4.webp");
background-size: 100% 100%; background-size: 100% 100%;
} }
.title { .title {

Loading…
Cancel
Save