From 1e719517e5c5f83a4606a2179ec08c52ee8ccc67 Mon Sep 17 00:00:00 2001 From: hujunbo <9094908@qq.com> Date: Sun, 18 Sep 2022 09:12:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DocInfoController.java | 16 ++ .../ruoyi/biemo/business/domain/DocInfo.java | 6 + .../business/service/CategoryService.java | 6 +- .../business/service/DocInfoService.java | 29 ++- .../ruoyi/biemo/nlp/WordDistanceUtils.java | 17 ++ .../demo/DemoPerceptronLexicalAnalyzer.java | 30 +-- ruoyi-ui/src/views/components/graphShow.vue | 176 +++++++++--------- ruoyi-ui/src/views/components/myCard.vue | 59 ++++++ ruoyi-ui/src/views/components/newsDetail.vue | 96 ++++++---- ruoyi-ui/src/views/docInfo/index.vue | 83 +++++++-- ruoyi-ui/src/views/neo4jd3/index.vue | 34 ++-- 11 files changed, 378 insertions(+), 174 deletions(-) create mode 100644 ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordDistanceUtils.java create mode 100644 ruoyi-ui/src/views/components/myCard.vue 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 97e9099..f83da93 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 @@ -1,7 +1,9 @@ package com.ruoyi.biemo.business.controller; import com.alibaba.fastjson.JSONObject; +import com.ruoyi.biemo.business.domain.Category; import com.ruoyi.biemo.business.domain.DocInfo; +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; @@ -30,6 +32,8 @@ public class DocInfoController extends BaseController { @Autowired private DocInfoService docInfoService; + @Autowired + private CategoryService categoryService; /** * 查询文章管理列表 */ @@ -38,6 +42,13 @@ public class DocInfoController extends BaseController { public Page list(DocInfo docInfo) { Page page = docInfoService.selectDocInfoPage(docInfo,PageFactory.defaultPage()); + page.getRows().forEach(doc->{ + Category category = new Category(); + category = categoryService.selectCategoryById(doc.getCateId()); + if(category!=null&&category.getName()!=null){ + doc.setCateName(category.getName()); + } + }); return page; } @@ -93,4 +104,9 @@ public class DocInfoController extends BaseController { public AjaxResult analysis(@PathVariable String id){ return AjaxResult.success(docInfoService.analysis(id)); } + + @GetMapping("/summary/{id}") + public AjaxResult summary(@PathVariable String id){ + return AjaxResult.success(docInfoService.summary(id)); + } } diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/DocInfo.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/DocInfo.java index 332bd8d..4e1520b 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/DocInfo.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/domain/DocInfo.java @@ -57,6 +57,10 @@ public class DocInfo implements Serializable { private Long updatedBy; @FieldInfo(type = "keyword",participle = 0) private Integer isSync; + @FieldInfo(type = "keyword",participle = 0) + private Integer hot; + @FieldInfo(type = "keyword",participle = 0) + private Integer recommend; @CreateTime @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @FieldInfo(type = "datetime",participle = 0) @@ -72,4 +76,6 @@ public class DocInfo implements Serializable { //情感数据 private String parserEmotion; + private String cateName; + } diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/CategoryService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/CategoryService.java index 8cc7376..6afdb74 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/CategoryService.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/service/CategoryService.java @@ -61,7 +61,11 @@ public class CategoryService extends EsService { */ public Category selectCategoryById(String id) { - return esLambdaQuery().eq(Category::getId,id).query().get(0); + if(id==null||id.trim().length()==0){ + return null; + } + List categories = esLambdaQuery().eq(Category::getId,id).query(); + return categories!=null&&categories.size()>0?categories.get(0):null; } /** 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 ac9c5c9..1480ad1 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 @@ -12,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.SummaryUtils; import com.ruoyi.biemo.utils.MyObjects; import com.ruoyi.common.utils.StringUtils; import org.elasticsearch.search.SearchHit; @@ -23,6 +24,7 @@ import org.springframework.context.ApplicationEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; +import javax.print.Doc; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -65,7 +67,11 @@ public class DocInfoService extends EsService { */ public DocInfo selectDocInfoById(String id) { - return esLambdaQuery().eq(DocInfo::getId,id).query().get(0); + if(id==null||id.trim().length()==0){ + return null; + } + List docInfos = esLambdaQuery().eq(DocInfo::getId,id).query(); + return docInfos!=null&&docInfos.size()>0?docInfos.get(0):null; } /** @@ -190,20 +196,21 @@ public class DocInfoService extends EsService { String relationName = nrn[1]; String nodeName2 = nrn[2]; Node node1 = new Node(); - node1.setId(nodesMap.get(nodeName1)); - node1.setLabels(new ArrayList(){{add(nodeName1);}}); + //node1.setId(nodesMap.get(nodeName1)); + node1.setId(nodeName1); + node1.setLabels(new ArrayList(){{add(nodeName1);add("通信");}}); node1.setProperties(new HashMap(){{put("name",nodeName1);put("email","9094908@qq.com");}}); Node node2 = new Node(); - node2.setId(nodesMap.get(nodeName2)); - node2.setLabels(new ArrayList(){{add(nodeName2);}}); + node2.setId(nodeName2); + node2.setLabels(new ArrayList(){{add(nodeName2);add("雷达");}}); node2.setProperties(new HashMap(){{put("name",nodeName2);put("email","9094908@qq.com");}}); nodes.add(node1); nodes.add(node2); Relationship relationship = new Relationship(); relationship.setId(String.valueOf(i++)); relationship.setType(relationName); - relationship.setStartNode(node1.getId()); - relationship.setEndNode(node2.getId()); + relationship.setStartNode(nodeName1); + relationship.setEndNode(nodeName2); relationship.setProperties(new HashMap(){{put("source",nodeName1);put("relation",relationName);put("target",nodeName2);}}); relationships.add(relationship); } @@ -268,4 +275,12 @@ public class DocInfoService extends EsService { System.out.println(JSONObject.toJSONString(response)); return response; } + + public String summary(String id) { + DocInfo docInfo = this.selectDocInfoById(id); + String summary = SummaryUtils.autoSummary(docInfo.getContent()); + docInfo.setSummary(summary); + this.insertOrUpdateDocInfo(docInfo); + return summary; + } } diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordDistanceUtils.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordDistanceUtils.java new file mode 100644 index 0000000..8e97140 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordDistanceUtils.java @@ -0,0 +1,17 @@ +package com.ruoyi.biemo.nlp; + +import com.hankcs.hanlp.dictionary.CoreSynonymDictionary; + +//相似度计算 +public class WordDistanceUtils { + + //语义距离 + public Long distance(String a,String b){ + return CoreSynonymDictionary.distance(a, b); + } + + //语义相似度 + public Double similarity(String a,String b){ + return CoreSynonymDictionary.similarity(a, b); + } +} diff --git a/ruoyi-hanlp/src/test/java/com/hankcs/demo/DemoPerceptronLexicalAnalyzer.java b/ruoyi-hanlp/src/test/java/com/hankcs/demo/DemoPerceptronLexicalAnalyzer.java index 29ef01e..8575c07 100644 --- a/ruoyi-hanlp/src/test/java/com/hankcs/demo/DemoPerceptronLexicalAnalyzer.java +++ b/ruoyi-hanlp/src/test/java/com/hankcs/demo/DemoPerceptronLexicalAnalyzer.java @@ -32,30 +32,30 @@ public class DemoPerceptronLexicalAnalyzer extends TestUtility PerceptronLexicalAnalyzer analyzer = new PerceptronLexicalAnalyzer("data/model/perceptron/pku199801/cws.bin", HanLP.Config.PerceptronPOSModelPath, HanLP.Config.PerceptronNERModelPath); - System.out.println(analyzer.analyze("上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观")); - System.out.println(analyzer.analyze("微软公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。")); + //System.out.println(analyzer.analyze("上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观").translateLabels()); + //System.out.println(analyzer.analyze("微软公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。").translateLabels()); // 任何模型总会有失误,特别是98年这种陈旧的语料库 - System.out.println(analyzer.analyze("总统普京与特朗普通电话讨论太空探索技术公司")); + System.out.println(analyzer.analyze("总统普京与特朗普通电话讨论太空探索技术公司").translateLabels()); // 支持在线学习 analyzer.learn("与/c 特朗普/nr 通/v 电话/n 讨论/v [太空/s 探索/vn 技术/n 公司/n]/nt"); // 学习到新知识 - System.out.println(analyzer.analyze("总统普京与特朗普通电话讨论太空探索技术公司")); + //System.out.println(analyzer.analyze("总统普京与特朗普通电话讨论太空探索技术公司")); // 还可以举一反三 - System.out.println(analyzer.analyze("主席和特朗普通电话")); + //System.out.println(analyzer.analyze("主席和特朗普通电话")); // 知识的泛化不是死板的规则,而是比较灵活的统计信息 - System.out.println(analyzer.analyze("我在浙江金华出生")); - analyzer.learn("在/p 浙江/ns 金华/ns 出生/v"); - System.out.println(analyzer.analyze("我在四川金华出生,我的名字叫金华")); + //System.out.println(analyzer.analyze("我在浙江金华出生")); + //analyzer.learn("在/p 浙江/ns 金华/ns 出生/v"); + //System.out.println(analyzer.analyze("我在四川金华出生,我的名字叫金华")); // 在线学习后的模型支持序列化,以分词模型为例: -// analyzer.getPerceptronSegmenter().getModel().save(HanLP.Config.PerceptronCWSModelPath); - + //analyzer.getPerceptronSegmenter().getModel().save("data/model/perceptron/pku199801/cws.bin"); + //analyzer.getPerceptronPOSTagger().getModel().save(HanLP.Config.PerceptronPOSModelPath); // 请用户按需执行对空格制表符等的预处理,只有你最清楚自己的文本中都有些什么奇怪的东西 - System.out.println(analyzer.analyze("空格 \t\n\r\f 统统都不要" - .replaceAll("\\s+", "") // 去除所有空白符 - .replaceAll(" ", "") // 如果一些文本中含有html控制符 - )); +// System.out.println(analyzer.analyze("空格 \t\n\r\f 统统都不要" +// .replaceAll("\\s+", "") // 去除所有空白符 +// .replaceAll(" ", "") // 如果一些文本中含有html控制符 +// )); } -} \ No newline at end of file +} diff --git a/ruoyi-ui/src/views/components/graphShow.vue b/ruoyi-ui/src/views/components/graphShow.vue index 9ff0494..172930a 100644 --- a/ruoyi-ui/src/views/components/graphShow.vue +++ b/ruoyi-ui/src/views/components/graphShow.vue @@ -1,10 +1,46 @@ + - +.el-col { + border-radius: 4px; +} +.bg-purple-dark { + background: #f5f5f5; +} +.bg-purple { + background: #f7f7fa; +} +.bg-purple-light { + background: #e5e9f2; +} +.grid-content { + border-radius: 4px; + padding: 0 4px; + .title { + font-size: 20px; + text-align: center; + margin: 15px 0; + color: #188ffe; + } + .subtitle { + font-size: 16px; + color: #090909; + display: flex; + justify-content: center ; + } + .content { + width: 100%; + justify-content: center ; + font-size: 16px; + color: #393636; + font-family: 'Microsoft YaHei UI', 'Microsoft YaHei', DengXian, SimSun, 'Segoe UI', Tahoma, Helvetica, sans-serif; + } + +} +.row-bg { + padding: 10px 0; + background-color: #f9fafc; +} + + diff --git a/ruoyi-ui/src/views/components/myCard.vue b/ruoyi-ui/src/views/components/myCard.vue new file mode 100644 index 0000000..8c4e36e --- /dev/null +++ b/ruoyi-ui/src/views/components/myCard.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/ruoyi-ui/src/views/components/newsDetail.vue b/ruoyi-ui/src/views/components/newsDetail.vue index 1d8db23..6248940 100644 --- a/ruoyi-ui/src/views/components/newsDetail.vue +++ b/ruoyi-ui/src/views/components/newsDetail.vue @@ -1,38 +1,52 @@ diff --git a/ruoyi-ui/src/views/docInfo/index.vue b/ruoyi-ui/src/views/docInfo/index.vue index ab1c92b..d3a91f9 100644 --- a/ruoyi-ui/src/views/docInfo/index.vue +++ b/ruoyi-ui/src/views/docInfo/index.vue @@ -25,10 +25,10 @@ style="width: 240px" > @@ -40,10 +40,10 @@ style="width: 240px" > @@ -110,9 +110,10 @@ - + @@ -174,8 +175,15 @@ + - + + + + + + + @@ -194,9 +202,14 @@ + diff --git a/ruoyi-ui/src/views/neo4jd3/index.vue b/ruoyi-ui/src/views/neo4jd3/index.vue index f252eac..0b77091 100644 --- a/ruoyi-ui/src/views/neo4jd3/index.vue +++ b/ruoyi-ui/src/views/neo4jd3/index.vue @@ -1,6 +1,5 @@