From d4b1aecafaab20ba493b6c3899b0f566c630c212 Mon Sep 17 00:00:00 2001 From: "@t2652009480" <2652009480@qq.com> Date: Wed, 21 Aug 2024 17:04:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E5=AD=97=E8=90=A5=E9=94=80=E5=AE=9E?= =?UTF-8?q?=E8=AE=AD=E7=AE=97=E6=B3=95=E7=AC=AC=E4=B8=89=E8=BD=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StuExperimentalTrainingController.java | 6 +- .../StuDigitalMarketingModelServiceImpl.java | 48 ++++++++--- .../marketing/util/algorithm/Apriori.java | 85 ++++++++++--------- .../util/algorithm/KMeansResult.java | 23 +++-- 4 files changed, 106 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/sztzjy/marketing/controller/stu/StuExperimentalTrainingController.java b/src/main/java/com/sztzjy/marketing/controller/stu/StuExperimentalTrainingController.java index df7ff29..2056cbb 100644 --- a/src/main/java/com/sztzjy/marketing/controller/stu/StuExperimentalTrainingController.java +++ b/src/main/java/com/sztzjy/marketing/controller/stu/StuExperimentalTrainingController.java @@ -14,6 +14,7 @@ import com.sztzjy.marketing.mapper.StuAssessmentQuestionDetailsMapper; import com.sztzjy.marketing.mapper.StuImageRecognitionTrainingMapper; import com.sztzjy.marketing.mapper.StuLearningAssessmentMapper; import com.sztzjy.marketing.service.StuFiveGTrainingService; +import com.sztzjy.marketing.service.UserBehaviorProfilingAnaService; import com.sztzjy.marketing.util.ConvertUtil; import com.sztzjy.marketing.util.ResultEntity; import io.swagger.annotations.Api; @@ -24,6 +25,7 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.*; import java.util.stream.Collectors; @@ -51,6 +53,8 @@ public class StuExperimentalTrainingController { @Autowired private StuImageRecognitionTrainingMapper stuImageRecognitionTrainingMapper; + @Resource + UserBehaviorProfilingAnaService behaviorProfilingAnaService; @ApiOperation("什么是大数据/获取题目") @GetMapping("/bigDataTopic") @@ -230,7 +234,7 @@ public class StuExperimentalTrainingController { } -// stuDigitalIndustrializationService.practicalTrainingSubmission(answers.get(0).getUserId(),"大数据","什么是大数据",count); + behaviorProfilingAnaService.practicalTrainingSubmission(answers.get(0).getUserId(),"什么是大数据",count); diff --git a/src/main/java/com/sztzjy/marketing/service/impl/StuDigitalMarketingModelServiceImpl.java b/src/main/java/com/sztzjy/marketing/service/impl/StuDigitalMarketingModelServiceImpl.java index 89b5e58..65d39e2 100644 --- a/src/main/java/com/sztzjy/marketing/service/impl/StuDigitalMarketingModelServiceImpl.java +++ b/src/main/java/com/sztzjy/marketing/service/impl/StuDigitalMarketingModelServiceImpl.java @@ -1,6 +1,8 @@ package com.sztzjy.marketing.service.impl; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.seg.common.Term; import com.sztzjy.marketing.config.Constant; @@ -88,7 +90,8 @@ public class StuDigitalMarketingModelServiceImpl implements StuDigitalMarketingM if(modelType.equals(Constant.COMMENT_EXTRACTION)){ //评论观点抽取 String commentUrl = "https://aip.baidubce.com/rpc/2.0/nlp/v2/comment_tag?charset=UTF-8&access_token="+ getAccessToken(); - RequestBody body = RequestBody.create(mediaType, "{\"text\":\""+content+"\",\"type\":8}"); + + RequestBody body = RequestBody.create(mediaType, "{\"text\":\""+content+"\",\"type\":\""+id+"\"}"); Request request = new Request.Builder() .url(commentUrl) @@ -98,8 +101,26 @@ public class StuDigitalMarketingModelServiceImpl implements StuDigitalMarketingM .build(); Response response = HTTP_CLIENT.newCall(request).execute(); + String string = response.body().string(); + // Gson对象 + Gson gson = new Gson(); + Map data = gson.fromJson(string, new TypeToken>(){}.getType()); +// Object object = data.get("items"); +// +// +// if(object instanceof List){ +// ArrayList tagList = (ArrayList) object; +// if (tagList.isEmpty()) { +// return new ResultEntity(HttpStatus.ACCEPTED,"请重新选择评论类型"); +// } +// } + if(data.containsKey("error_msg")){ + return new ResultEntity(HttpStatus.ACCEPTED,"评论异常"); + } if (response.body() != null) { - return new ResultEntity(HttpStatus.OK,"成功",response.body().string()); + return new ResultEntity(HttpStatus.OK, "成功", string); + }else { + return new ResultEntity(HttpStatus.ACCEPTED,"评论异常"); } } @@ -114,8 +135,17 @@ public class StuDigitalMarketingModelServiceImpl implements StuDigitalMarketingM .build(); Response response = HTTP_CLIENT.newCall(request).execute(); + String string = response.body().string(); + // Gson对象 + Gson gson = new Gson(); + Map data = gson.fromJson(string, new TypeToken>(){}.getType()); + + if(data.containsKey("error_msg")){ + return new ResultEntity(HttpStatus.ACCEPTED,"评论异常"); + } + if (response.body() != null) { - return new ResultEntity(HttpStatus.OK, "成功", response.body().string()); + return new ResultEntity(HttpStatus.OK, "成功", string); } @@ -171,15 +201,9 @@ public class StuDigitalMarketingModelServiceImpl implements StuDigitalMarketingM } // 过滤标点符号的函数 - private String filterPunctuation(String originalContent) { - // 创建一个正则表达式,用于匹配所有标点符号 - String punctuationPattern = "[\\p{Punct}]"; - // 创建一个 Pattern 对象 - Pattern pattern = Pattern.compile(punctuationPattern); - // 创建一个 Matcher 对象 - Matcher matcher = pattern.matcher(originalContent); - // 使用 Matcher 的 replaceAll 方法替换所有匹配的标点符号为 "" - return matcher.replaceAll(""); + private String filterPunctuation(String content) { + //标点符号 + return content.replaceAll("[,。、?!:;,.?!:'“”’‘]", ""); } @Override diff --git a/src/main/java/com/sztzjy/marketing/util/algorithm/Apriori.java b/src/main/java/com/sztzjy/marketing/util/algorithm/Apriori.java index 1c2bde8..34fd6e7 100644 --- a/src/main/java/com/sztzjy/marketing/util/algorithm/Apriori.java +++ b/src/main/java/com/sztzjy/marketing/util/algorithm/Apriori.java @@ -41,7 +41,7 @@ public class Apriori { } result.add(rowData); } - System.out.println("\nD:" + result); +// System.out.println("\nD:" + result); return result; } // public static ArrayList> readTable(MultipartFile file) { @@ -161,10 +161,10 @@ public class Apriori { } str = C.toString(); - System.out.println("候选"+t+"项集:C: \n"+C); +// System.out.println("候选"+t+"项集:C: \n"+C); // 二、剪枝步 pruning(C, L,min_support); - System.out.println("频繁"+t+"项集:L: \n"+L+"\n"); +// System.out.println("频繁"+t+"项集:L: \n"+L+"\n"); str = L.toString(); //System.out.println("==="); @@ -219,55 +219,64 @@ public class Apriori { List lists=new ArrayList<>(); for (ArrayList key : L_ALL.keySet()) {// 对最终的关联集各个事件进行判断 - ArrayList> key_allSubset = getSubset(key); - //得到所有频繁集中每个集合的子集 - // System.out.println(key_allSubset); - for (int i = 0; i < key_allSubset.size(); i++) { - ArrayList item_pre = key_allSubset.get(i);//得到一个真子集 - if (0 < item_pre.size() && item_pre.size() < key.size()) {// 判断是否是非空真子集 - // 各个非空互补真子集之间形成关联事件 - double item_pre_support = L_ALL.get(item_pre);//得到真子集的支持度度 - //System.out.println("itempre="+item_pre_support); - for (int j = 0; j < key_allSubset.size(); j++) { - ArrayList item_post = key_allSubset.get(j); - if (0 < item_post.size() - && item_post.size() < key.size() - && arrayListUnion(item_pre, item_post).equals(key) - && intersectionIsNull(item_pre, item_post)) - //不相交的两个非空真子集,相并为频繁项集 - { - double d = L_ALL.get(arrayListUnion(item_pre, item_post)); - //double item_post_support = L_ALL.get(item_post);// 互补真子集的支持度比则是事件的置信度 - //System.out.println("item_post="+item_post_support); - double confident = d - / item_pre_support; // 事件的置信度 - if (confident > min_confident) {// 如果事件的置信度大于最小置信度 - //封装对象返回 + if (key != null && !key.isEmpty() && L_ALL != null) { + ArrayList> key_allSubset = getSubset(key); + //得到所有频繁集中每个集合的子集 + // System.out.println(key_allSubset); + for (int i = 0; i < key_allSubset.size(); i++) { + ArrayList item_pre = key_allSubset.get(i);//得到一个真子集 + if(item_pre.size()>1){ + continue; + } + if(item_pre.isEmpty()){ + continue; + } + if (0 < item_pre.size() && item_pre.size() < key.size()) {// 判断是否是非空真子集 + // 各个非空互补真子集之间形成关联事件 + double item_pre_support = L_ALL.get(item_pre);//得到真子集的支持度度 + //System.out.println("itempre="+item_pre_support); + for (int j = 0; j < key_allSubset.size(); j++) { + ArrayList item_post = key_allSubset.get(j); + if (0 < item_post.size() + && item_post.size() < key.size() + && arrayListUnion(item_pre, item_post).equals(key) + && intersectionIsNull(item_pre, item_post)) + //不相交的两个非空真子集,相并为频繁项集 + { + double d = L_ALL.get(arrayListUnion(item_pre, item_post)); + //double item_post_support = L_ALL.get(item_post);// 互补真子集的支持度比则是事件的置信度 + //System.out.println("item_post="+item_post_support); + double confident = d + / item_pre_support; // 事件的置信度 + if (confident > min_confident) {// 如果事件的置信度大于最小置信度 + //封装对象返回 - AssociationRulesDTO associationRulesDTO=new AssociationRulesDTO(); - associationRulesDTO.setCorrelation(item_pre); - associationRulesDTO.setAssociated(item_post); - associationRulesDTO.setConfidenceLevel(confident); + AssociationRulesDTO associationRulesDTO=new AssociationRulesDTO(); + associationRulesDTO.setCorrelation(item_pre); + associationRulesDTO.setAssociated(item_post); + associationRulesDTO.setConfidenceLevel(confident); - String string=item_pre + "==>" + item_post+"==>" + confident; - associationRulesDTO.setRule(string); + String string=item_pre + "==>" + item_post+"==>" + confident; + associationRulesDTO.setRule(string); - list.add(associationRulesDTO); + list.add(associationRulesDTO); - System.out.print(item_pre + "==>" + item_post );// 则是一个关联事件 - System.out.println("==>" + confident); +// System.out.print(item_pre + "==>" + item_post );// 则是一个关联事件 +// System.out.println("==>" + confident); - lists.add(string); + lists.add(string); + } } + } - } } } + } return list; } diff --git a/src/main/java/com/sztzjy/marketing/util/algorithm/KMeansResult.java b/src/main/java/com/sztzjy/marketing/util/algorithm/KMeansResult.java index fa0f6c9..2b5e36f 100644 --- a/src/main/java/com/sztzjy/marketing/util/algorithm/KMeansResult.java +++ b/src/main/java/com/sztzjy/marketing/util/algorithm/KMeansResult.java @@ -228,13 +228,26 @@ public class KMeansResult { } + int a=0; + for (ArrayList point : cluster) { + a=point.size(); + } float size = cluster.size(); ArrayList centroid = new ArrayList<>(); - centroid.add(0f); - centroid.add(sum1 / size); - centroid.add(sum2 / size); - centroid.add(sum3 / size); - centroid.add(sum4 / size); + for (int i = 0; i < a; i++) { + if(i==0){ + centroid.add(sum1 / size); + } + if(i==1){ + centroid.add(sum2 / size); + } + if(i==2){ + centroid.add(sum3 / size); + } + if(i==3){ + centroid.add(sum4 / size); + } + } return centroid; }