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 4d23d89..5511f83 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,13 +11,12 @@ 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.mongodb.entity.SplitWordDrill; +import com.ruoyi.biemo.business.domain.WordCloudItem; import com.ruoyi.biemo.business.service.CategoryService; import com.ruoyi.biemo.business.service.DocInfoService; import com.ruoyi.biemo.core.page.Page; import com.ruoyi.biemo.core.page.PageFactory; import com.ruoyi.biemo.nlp.DependencyParserUtils; -import com.ruoyi.biemo.nlp.SentimentAnalysisUtils; import com.ruoyi.biemo.nlp.TextClassificationUtils; import com.ruoyi.biemo.utils.MyObjects; import com.ruoyi.common.annotation.Log; @@ -35,7 +34,10 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** @@ -72,6 +74,11 @@ public class DocInfoController extends BaseController { return page; } + @GetMapping("/getWordCloudByCateId/{categoryId}") + public AjaxResult getWordCloudByCateId(@PathVariable String categoryId){ + List wordCloudItems = docInfoService.getWordCloudByCateId(categoryId); + return AjaxResult.success(wordCloudItems); + } /** * 导出文章管理列表 */ @@ -414,8 +421,6 @@ public class DocInfoController extends BaseController { return AjaxResult.error("格式不正确"); } } - - // /** // * 分词结果上传 // * diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/WordCloudItem.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/WordCloudItem.java new file mode 100644 index 0000000..61e45e2 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/WordCloudItem.java @@ -0,0 +1,33 @@ +package com.ruoyi.biemo.business.domain; + +import java.io.Serializable; + +/** + * @author hujunbo + * @date 2023/6/21 + */ +public class WordCloudItem implements Serializable { + + private String name; + + private Integer value; + + public WordCloudItem() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } +} 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 0486130..2fe2937 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 @@ -2,9 +2,12 @@ package com.ruoyi.biemo.business.service; 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.event.DocInfoDeleteEvent; import com.ruoyi.biemo.business.domain.event.DocInfoSaveEvent; import com.ruoyi.biemo.business.response.MyResultResponse; @@ -16,6 +19,8 @@ import com.ruoyi.biemo.nlp.SummaryUtils; import com.ruoyi.biemo.utils.MyObjects; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortOrder; @@ -27,6 +32,7 @@ import org.springframework.stereotype.Service; import javax.print.Doc; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -443,5 +449,32 @@ public class DocInfoService extends EsService { // insertOrUpdateDocInfo(docInfo); return response; } - + public List getWordCloudByCateId(String categoryId) { + 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()).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); + } + }); + } + } + for(Map.Entry entry : temp.entrySet()){ + WordCloudItem wordCloudItem = new WordCloudItem(); + wordCloudItem.setName(entry.getKey()); + wordCloudItem.setValue(entry.getValue()); + wordCloudItemList.add(wordCloudItem); + } + return wordCloudItemList; + } }