diff --git a/.gitignore b/.gitignore index 4c42c8f..a432c81 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ nbproject/private/ build/* nbbuild/ dist/ +dist.zip nbdist/ .nb-gradle/ diff --git a/ruoyi-biemo/pom.xml b/ruoyi-biemo/pom.xml index b455f69..7a8ffc1 100644 --- a/ruoyi-biemo/pom.xml +++ b/ruoyi-biemo/pom.xml @@ -35,6 +35,10 @@ org.springframework.boot spring-boot-starter-data-mongodb + + org.springframework.boot + spring-boot-starter-data-redis + cn.hutool hutool-all diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java index d07abfe..1569f31 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/business/controller/ReportController.java @@ -4,6 +4,7 @@ import com.ruoyi.biemo.business.domain.Report; import com.ruoyi.biemo.business.service.ReportService; import com.ruoyi.biemo.core.page.Page; import com.ruoyi.biemo.core.page.PageFactory; +import com.ruoyi.biemo.nlp.WordVectorModelUtils; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; @@ -95,4 +96,10 @@ public class ReportController return AjaxResult.success("查询成功",reportService.ticket2token(ticket)); } + + @PostMapping("/similar") + public AjaxResult similar(String text1,String text2){ + return AjaxResult.success(WordVectorModelUtils.similarCount(text1,text2)); + } + } diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordVectorModelUtils.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordVectorModelUtils.java new file mode 100644 index 0000000..662d830 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/WordVectorModelUtils.java @@ -0,0 +1,59 @@ +package com.ruoyi.biemo.nlp; + +import com.hankcs.hanlp.corpus.io.IOUtil; +import com.hankcs.hanlp.mining.word2vec.DocVectorModel; +import com.hankcs.hanlp.mining.word2vec.Word2VecTrainer; +import com.hankcs.hanlp.mining.word2vec.WordVectorModel; +import com.ruoyi.biemo.utils.TestUtility; + +import java.io.IOException; + +/** + * 词向量工具 + */ +public class WordVectorModelUtils { + + private static final String TRAIN_FILE_NAME = TestUtility.ensureTestData("搜狗文本分类语料库已分词.txt", "http://hanlp.linrunsoft.com/release/corpus/sogou-mini-segmented.zip"); + private static final String MODEL_FILE_NAME = "data/test/word2vec.txt"; + + //相似度计算 + public static Float similarCount(String text1,String text2) { + WordVectorModel wordVectorModel = null; + try { + wordVectorModel = trainOrLoadModel(); + DocVectorModel docVectorModel = new DocVectorModel(wordVectorModel); + return docVectorModel.similarity(text1, text2); + } catch (IOException ioException) { + ioException.printStackTrace(); + return null; + } + } + + public static void main(String[] args) throws Exception{ + System.out.println(similarCount("沙尔克 VS 斯图加特 初盘 主队 水位 偏高 目前 斯图加特 客场 路有 反弹 迹象 排除 客队 可能 ","沃尔夫斯堡 VS 凯泽斯劳滕 一线 战役 庄家 开出 较高 平局 赔率 想必 有望 分出 胜负")); + } + + + + static WordVectorModel trainOrLoadModel() throws IOException + { + if (!IOUtil.isFileExisted(MODEL_FILE_NAME)) + { + if (!IOUtil.isFileExisted(TRAIN_FILE_NAME)) + { + System.err.println("语料不存在,请阅读文档了解语料获取与格式:https://github.com/hankcs/HanLP/wiki/word2vec"); + System.exit(1); + } + Word2VecTrainer trainerBuilder = new Word2VecTrainer(); + return trainerBuilder.train(TRAIN_FILE_NAME, MODEL_FILE_NAME); + } + + return loadModel(); + } + + static WordVectorModel loadModel() throws IOException + { + return new WordVectorModel(MODEL_FILE_NAME); + } + +} diff --git a/ruoyi-ui/src/api/biemo/report.js b/ruoyi-ui/src/api/biemo/report.js index c1cb90e..0e191da 100644 --- a/ruoyi-ui/src/api/biemo/report.js +++ b/ruoyi-ui/src/api/biemo/report.js @@ -42,3 +42,13 @@ export function delReport(id) { method: 'delete' }) } + + +// 相似度计算 +export function similar(query) { + return request({ + url: '/makesoft/report/similar', + method: 'post', + params: query + }) +} diff --git a/ruoyi-ui/src/views/docInfo/index.vue b/ruoyi-ui/src/views/docInfo/index.vue index 49dcde0..e4ad55a 100644 --- a/ruoyi-ui/src/views/docInfo/index.vue +++ b/ruoyi-ui/src/views/docInfo/index.vue @@ -1,6 +1,6 @@ +