diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/DocInfoController.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/DocInfoController.java index 5511f83..3b53fa9 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/DocInfoController.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/DocInfoController.java @@ -11,6 +11,7 @@ import com.hankcs.hanlp.seg.Segment; import com.hankcs.hanlp.seg.common.Term; import com.ruoyi.biemo.business.domain.Category; import com.ruoyi.biemo.business.domain.DocInfo; +import com.ruoyi.biemo.business.domain.EmotionResult; import com.ruoyi.biemo.business.domain.WordCloudItem; import com.ruoyi.biemo.business.service.CategoryService; import com.ruoyi.biemo.business.service.DocInfoService; @@ -77,8 +78,15 @@ public class DocInfoController extends BaseController { @GetMapping("/getWordCloudByCateId/{categoryId}") public AjaxResult getWordCloudByCateId(@PathVariable String categoryId){ List wordCloudItems = docInfoService.getWordCloudByCateId(categoryId); + return AjaxResult.success(wordCloudItems); } + + @GetMapping("/getEmotionAnalysisByCateId/{categoryId}") + public AjaxResult getEmotionAnalysis(@PathVariable String categoryId){ + EmotionResult emotionResult = docInfoService.getEmotionAnalysis(categoryId); + return AjaxResult.success(emotionResult); + } /** * 导出文章管理列表 */ diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/EmotionResult.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/EmotionResult.java new file mode 100644 index 0000000..8cb3a51 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/EmotionResult.java @@ -0,0 +1,50 @@ +package com.ruoyi.biemo.business.domain; + +public class EmotionResult { + private String downName; + private String upName; + private int downCount; + private int upCount; + + public EmotionResult(String downName, String upName, int downCount, int upCount) { + this.downName = downName; + this.upName = upName; + this.downCount = downCount; + this.upCount = upCount; + } + + public String getDownName() { + return downName; + } + + public String getUpName() { + return upName; + } + + public int getDownCount() { + return downCount; + } + + public int getUpCount() { + return upCount; + } + + public void setDownName(String downName) { + this.downName = downName; + } + + public void setUpName(String upName) { + this.upName = upName; + } + + public void setDownCount(int downCount) { + this.downCount = downCount; + } + + public void setUpCount(int upCount) { + this.upCount = upCount; + } + + public EmotionResult() { + } +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/DocInfoService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/DocInfoService.java index 8138bb3..8ea237d 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/DocInfoService.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/DocInfoService.java @@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.util.StringUtil; import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.tokenizer.NLPTokenizer; -import com.ruoyi.biemo.business.domain.DocInfo; -import com.ruoyi.biemo.business.domain.Node; -import com.ruoyi.biemo.business.domain.Relationship; -import com.ruoyi.biemo.business.domain.WordCloudItem; +import com.ruoyi.biemo.business.domain.*; import com.ruoyi.biemo.business.domain.event.DocInfoDeleteEvent; import com.ruoyi.biemo.business.domain.event.DocInfoSaveEvent; import com.ruoyi.biemo.business.response.MyResultResponse; @@ -15,6 +12,7 @@ import com.ruoyi.biemo.core.page.Page; import com.ruoyi.biemo.elasticsearch.util.EsService; import com.ruoyi.biemo.mongodb.utils.MongoHelper; import com.ruoyi.biemo.nlp.DependencyParserUtils; +import com.ruoyi.biemo.nlp.SentimentAnalysisUtils; import com.ruoyi.biemo.nlp.SummaryUtils; import com.ruoyi.biemo.utils.MyObjects; import com.ruoyi.common.core.domain.AjaxResult; @@ -238,7 +236,7 @@ public class DocInfoService extends EsService { } // 获取命名实体 try { - Map> nerTagSet = DependencyParserUtils.getMyNERTagSet(strArr); + Map> nerTagSet = DependencyParserUtils.getMyNERTagSet(strArr); docInfo.setParserNamedEntity(JSONObject.toJSONString(nerTagSet)); docInfo.setSummary(SummaryUtils.autoSummary(content)); } catch (Exception e) { @@ -344,19 +342,19 @@ public class DocInfoService extends EsService { } } MyResultResponse myResultResponse = new MyResultResponse(); - List results = new ArrayList<>(); + List results = new ArrayList<>(); List results2 = response2.getResults(); List results3 = response3.getResults(); - results.addAll(0,results3); - results.addAll(1,results2); + results.addAll(0, results3); + results.addAll(1, results2); List errors = myResultResponse.getErrors(); errors.addAll(response2.getErrors()); errors.addAll(response3.getErrors()); myResultResponse.setResults(results); myResultResponse.setErrors(errors); - return myResultResponse; + return myResultResponse; } //文章管理--批量分析 @@ -449,28 +447,29 @@ public class DocInfoService extends EsService { // insertOrUpdateDocInfo(docInfo); return response; } + public List getWordCloudByCateId(String categoryId) { String regex = "<.*?>"; // 匹配HTML标签的正则表达式 - Map temp = new ConcurrentHashMap<>(); + Map temp = new ConcurrentHashMap<>(); List wordCloudItemList = new ArrayList<>(); DocInfo docInfo = new DocInfo(); docInfo.setCateId(categoryId); List docInfoList = selectDocInfoList(docInfo); - if(CollectionUtils.isNotEmpty(docInfoList)){ - List termList = docInfoList.parallelStream().filter(ObjectUtils::isNotEmpty).flatMap(_docInfo -> NLPTokenizer.segment(_docInfo.getContent().replaceAll(regex, "").replaceAll("\\s+","").replaceAll("[,,  '“”.。]", "").trim()).stream()).collect(Collectors.toList()); - if(CollectionUtils.isNotEmpty(termList)){ + if (CollectionUtils.isNotEmpty(docInfoList)) { + List termList = docInfoList.parallelStream().filter(ObjectUtils::isNotEmpty).flatMap(_docInfo -> NLPTokenizer.segment(_docInfo.getContent().replaceAll(regex, "").replaceAll("\\s+", "").replaceAll("[,,  '“”.。]", "").trim()).stream()).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(termList)) { termList.parallelStream().forEach(term -> { String word = term.word; Integer value = term.getFrequency(); - if(!temp.containsKey(word)){ - temp.put(word,1); - }else{ - temp.put(word,temp.get(word)+1); + if (!temp.containsKey(word)) { + temp.put(word, 1); + } else { + temp.put(word, temp.get(word) + 1); } }); } } - for(Map.Entry entry : temp.entrySet()){ + for (Map.Entry entry : temp.entrySet()) { WordCloudItem wordCloudItem = new WordCloudItem(); wordCloudItem.setName(entry.getKey()); wordCloudItem.setValue(entry.getValue()); @@ -478,4 +477,48 @@ public class DocInfoService extends EsService { } return wordCloudItemList; } + + public EmotionResult getEmotionAnalysis(String categoryId) { + String regex = "<.*?>"; // 匹配HTML标签的正则表达式 + Map temp = new ConcurrentHashMap<>(); +// List emotionResultItemList = new ArrayList<>(); + EmotionResult emotionResult1 = new EmotionResult(); + DocInfo docInfo = new DocInfo(); + docInfo.setCateId(categoryId); + List docInfoList = selectDocInfoList(docInfo); + if (CollectionUtils.isNotEmpty(docInfoList)) { + List termList = docInfoList.parallelStream().filter(ObjectUtils::isNotEmpty).flatMap(_docInfo -> NLPTokenizer.segment(_docInfo.getContent().replaceAll(regex, "").replaceAll("\\s+", "").replaceAll("[,,  '“”.。]", "").trim()).stream()).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(termList)) { + termList.parallelStream().forEach(term -> { + String word = term.word; + Integer value = term.getFrequency(); + if (!temp.containsKey(word)) { + temp.put(word, 1); + } else { + temp.put(word, temp.get(word) + 1); + } + }); + } + } + int count = 0; + int count2 = 0; + for (Map.Entry entry : temp.entrySet()) { + EmotionResult emotionResult = new EmotionResult(); + String key = entry.getKey(); + String analysis = SentimentAnalysisUtils.analysis(key); + if (analysis.equals("正面")) { + count++; + } else { + count2++; + } + emotionResult.setUpCount(count); + emotionResult.setDownCount(count2); +// emotionResultItemList.add(emotionResult); + emotionResult1 = emotionResult; + } + emotionResult1.setDownName("负面"); + emotionResult1.setUpName("正面"); + return emotionResult1; + } } +