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 a5a72f2..4d23d89 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
@@ -95,6 +95,17 @@ public class DocInfoController extends BaseController {
         return AjaxResult.success(docInfoService.selectDocInfoById(id));
     }
 
+    /**
+     * 批量标注
+     */
+    @PostMapping(value = "/uploadPosTagIds")
+    public AjaxResult uploadPosTag(@RequestBody List<String> idList) throws IOException {
+        for (int i = 0; i < idList.size(); i++) {
+            getInfoDelHtml(idList.get(i));
+        }
+        return AjaxResult.success();
+    }
+
     /**
      * 获取文章管理详细信息 去掉内容标签
      */
@@ -110,6 +121,7 @@ public class DocInfoController extends BaseController {
         content = MyObjects.delHTMLTag(content);
         content = MyObjects.delSpace(content);
         JSONArray labels = new JSONArray();
+        result.put("docInfoId",docInfoId);
         result.put("content", content);
         result.put("connections", new JSONArray());
         result.put("connectionCategories", MyObjects.connectionCategories);
@@ -170,6 +182,12 @@ public class DocInfoController extends BaseController {
         map.put("adjective",adjective);
         map.put("adverb",adverb);
         result.put("partData",map);
+
+        //点击词性标注后直接上传 并修改状态
+        Query query = new Query(Criteria.where("_id").is(docInfoId));
+        Update update = new Update();
+        update.set("posTagStatus", "已标注");
+        mongoTemplate.upsert(query, update, DocInfo.class);
         return AjaxResult.success("查询成功",result);
     }
 
@@ -212,9 +230,9 @@ public class DocInfoController extends BaseController {
 
     @PostMapping("/uploadPosTag")
     public AjaxResult uploadPosTag(@RequestBody JSONObject jsonObject) throws IOException {
-        System.out.println(jsonObject);
         String content = jsonObject.getString("content");
         JSONArray labels = jsonObject.getJSONArray("labels");
+        String docInfoId = jsonObject.getString("docInfoId");
         List<IWord> wordList = new ArrayList<>();
         if(labels!=null&&labels.size()>0){
             for(int i=0;i<labels.size();i++){
@@ -223,7 +241,6 @@ public class DocInfoController extends BaseController {
                 Integer startIndex = labelJSONObject.getInteger("startIndex");
                 Integer endIndex = labelJSONObject.getInteger("endIndex");
                 Integer categoryId = labelJSONObject.getInteger("categoryId");
-
                 String value = content.substring(startIndex,endIndex);
                 String label = MyObjects.wordsMappingIndex.get(categoryId);
                 word.setLabel(label);
@@ -233,7 +250,11 @@ public class DocInfoController extends BaseController {
             Sentence sentence = new Sentence(wordList);
             DependencyParserUtils.learn(sentence);
         }
-        return  AjaxResult.success();
+        Query query = new Query(Criteria.where("_id").is(docInfoId));
+        Update update = new Update();
+        update.set("posTagStatus", "已标注");
+        mongoTemplate.upsert(query, update, DocInfo.class);
+        return AjaxResult.success("标注上传成功");
     }
 
     /**
@@ -309,8 +330,16 @@ public class DocInfoController extends BaseController {
 //        docInfoService.insertEs(docInfo);
 //    }
 
+    @PostMapping("/splitWordIds")
+    public AjaxResult splitWordIds(@RequestBody List<DocInfo> docInfoList){
+        for (int i = 0; i < docInfoList.size(); i++) {
+            splitWordDocInfo(docInfoList.get(i));
+        }
+        return AjaxResult.success("批量分词成功");
+    }
+
     @PostMapping ("/splitWordStr")
-    public AjaxResult splitWord(@RequestBody String str){
+    public AjaxResult splitWordStr(@RequestBody String str){
         Segment segment= HanLP.newSegment();
         List<Term> termList = segment.seg(str);
         List<String> wordList=new ArrayList<>();
@@ -322,8 +351,8 @@ public class DocInfoController extends BaseController {
     }
 
     @PostMapping ("/splitWordDocInfo")
-    public AjaxResult splitWordNew(@RequestBody DocInfo docInfo){
-        String title = docInfo.getTitle();
+    public AjaxResult splitWordDocInfo(@RequestBody DocInfo docInfo){
+        String title = docInfo.getContent();
         Segment segment= HanLP.newSegment();
         List<Term> termList = segment.seg(title);
         List<String> wordList=new ArrayList<>();
@@ -333,6 +362,16 @@ public class DocInfoController extends BaseController {
             wordList.add(word);
         }
         docInfo.setAnalyzeTitle(wordList);
+        List<String> analyzeTitleList = docInfo.getAnalyzeTitle();
+        for (int i = 0; i < analyzeTitleList.size(); i++) {
+            if(StringUtils.isNotBlank(analyzeTitleList.get(i))){
+                CustomDictionary.add(analyzeTitleList.get(i));
+            }
+        }
+        Query query = new Query(Criteria.where("_id").is(docInfo.getId()));
+        Update update = new Update();
+        update.set("splitWordStatus", "已分词");
+        mongoTemplate.upsert(query, update, DocInfo.class);
         return AjaxResult.success("分词成功",docInfo);
     }
 
@@ -343,7 +382,7 @@ public class DocInfoController extends BaseController {
      * @return
      */
     @PostMapping("/uploadSplitWordStr")
-    public AjaxResult uploadSplitWordNew(@RequestBody String splitResult) {
+    public AjaxResult uploadSplitWordStr(@RequestBody String splitResult) {
         try {
             String[] split = splitResult.split("/");
             for (int i = 0; i < split.length; i++) {
@@ -358,7 +397,7 @@ public class DocInfoController extends BaseController {
     }
 
     @PostMapping("/uploadSplitWordDocInfo")
-    public AjaxResult uploadSplitWordNew(@RequestBody DocInfo docInfo) {
+    public AjaxResult uploadSplitWordDocInfo(@RequestBody DocInfo docInfo) {
         try {
             List<String> analyzeTitleList = docInfo.getAnalyzeTitle();
             for (int i = 0; i < analyzeTitleList.size(); i++) {
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 6a18651..18ade71 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
@@ -1,5 +1,7 @@
 package com.ruoyi.biemo.business.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.biemo.business.domain.Report;
 import com.ruoyi.biemo.business.service.ReportService;
 import com.ruoyi.biemo.core.page.Page;
@@ -126,12 +128,14 @@ public class ReportController
 
 
     @PostMapping("/similar")
-    public AjaxResult similar(String text1,String text2){
-        return AjaxResult.success(WordVectorModelUtils.similarCount(text1,text2));
+    public AjaxResult similar(@RequestBody JSONObject text1, @RequestBody String text2){
+        String text11 = text1.get("text1").toString();
+        String text22 = text1.get("text2").toString();
+        return AjaxResult.success(WordVectorModelUtils.similarCount(text11,text22));
     }
 
     @PostMapping("/sentiment")
-    public AjaxResult sentiment(String text){
+    public AjaxResult sentiment(@RequestBody String text){
         return AjaxResult.success("查询成功",SentimentAnalysisUtils.analysis(text));
     }
 
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 7e8e8a6..5008f3a 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
@@ -66,4 +66,7 @@ public class DocInfo extends BiemoEntity {
   //分词状态 已分词 和未分词
   private String splitWordStatus;
 
+  //词性标注状态 已标注 未标注
+  private String posTagStatus;
+
 }
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/DependencyParserUtils.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/DependencyParserUtils.java
index b1685c4..65c9d0d 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/DependencyParserUtils.java
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/DependencyParserUtils.java
@@ -32,6 +32,10 @@ public class DependencyParserUtils {
         return analyzer.analyze(text);
     }
 
+    public static Sentence nerAnalysis(String text,PerceptronLexicalAnalyzer analyzer) throws IOException {
+        return analyzer.analyze(text);
+    }
+
     //上传词性
     public static Boolean learn(Sentence sentence) throws IOException {
         PerceptronLexicalAnalyzer analyzer = new PerceptronLexicalAnalyzer(HanLP.Config.PerceptronCWSModelPath,
@@ -57,8 +61,9 @@ public class DependencyParserUtils {
     public static Map<String,Set<String>> getMyNERTagSet(String[] strArr) throws Exception{
         Map<String,Set<String>> result = new HashMap<>();
         if(strArr!=null&&strArr.length>0){
+            PerceptronLexicalAnalyzer analyzer = new PerceptronLexicalAnalyzer(HanLP.Config.PerceptronCWSModelPath, HanLP.Config.PerceptronPOSModelPath, HanLP.Config.PerceptronNERModelPath);
             for(int i=0;i<strArr.length;i++){
-                Sentence sentence = nerAnalysis(strArr[i]);
+                Sentence sentence = nerAnalysis(strArr[i],analyzer);
                 sentence = sentence.translateLabels();
                 List<IWord> words = sentence.wordList;
                 words.forEach(word->{
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/utils/TestUtility.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/utils/TestUtility.java
index 3a0555f..0a70160 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/utils/TestUtility.java
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/utils/TestUtility.java
@@ -28,7 +28,9 @@ public class TestUtility
 
     public static void ensureFullData()
     {
-        ensureData("data/model/crf", "http://nlp.hankcs.com/download.php?file=data", ".", false);
+//        ensureData("data/model/crf", "http://nlp.hankcs.com/download.php?file=data", ".", false);
+//        ensureData("D:\\tianze\\文本大数据\\analysis-hanlp\\data\\model\\crf", "http://nlp.hankcs.com/download.php?file=data", ".", false);
+        ensureData("/usr/local/textjar/analysis-hanlp/data/model/crf", "http://nlp.hankcs.com/download.php?file=data", ".", false);
     }
 
     /**
@@ -39,6 +41,12 @@ public class TestUtility
      * @return name的绝对路径
      */
     public static String ensureData(String name, String url)
+    {
+        return null;
+//        return ensureData(name, url, null, true);
+    }
+
+    public static String ensureData2(String name, String url)
     {
         return ensureData(name, url, null, true);
     }
@@ -83,7 +91,14 @@ public class TestUtility
      */
     public static String ensureTestData(String name, String url)
     {
-        return ensureData(String.format("data/test/%s", name), url);
+//        return ensureData(String.format("data/test/%s", name), url);
+        return ensureData(String.format("/usr/local/textjar/analysis-hanlp/data/test/%s", name), url);
+    }
+
+    public static String ensureTest2Data(String name, String url)
+    {
+//        return ensureData(String.format("data/test/%s", name), url);
+        return ensureData2(String.format("/usr/local/textjar/analysis-hanlp/data/test/%s", name), url);
     }
 
     /**
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
index 2ad833c..b3ccc42 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -29,7 +29,7 @@
 
 	<sql id="selectMenuVo">
         select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time 
-		from sys_menu
+		from sys_menu_stu
     </sql>
     
     <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
@@ -50,13 +50,13 @@
 	
 	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-		from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0
+		from sys_menu_stu m where m.menu_type in ('M', 'C') and m.status = 0
 		order by m.parent_id, m.order_num
 	</select>
 	
 	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-		from sys_menu m
+		from sys_menu_stu m
 		left join sys_role_menu rm on m.menu_id = rm.menu_id
 		left join sys_user_role ur on rm.role_id = ur.role_id
 		left join sys_role ro on ur.role_id = ro.role_id
@@ -75,7 +75,7 @@
     
     <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-		from sys_menu m
+		from sys_menu_stu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
 			 left join sys_role ro on ur.role_id = ro.role_id
@@ -86,25 +86,25 @@
 	
 	<select id="selectMenuListByRoleId" resultType="Long">
 		select m.menu_id
-		from sys_menu m
+		from sys_menu_stu m
             left join sys_role_menu rm on m.menu_id = rm.menu_id
         where rm.role_id = #{roleId}
             <if test="menuCheckStrictly">
-              and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
+              and m.menu_id not in (select m.parent_id from sys_menu_stu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
             </if>
 		order by m.parent_id, m.order_num
 	</select>
 	
 	<select id="selectMenuPerms" resultType="String">
 		select distinct m.perms
-		from sys_menu m
+		from sys_menu_stu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
 	</select>
 
 	<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
 		select distinct m.perms
-		from sys_menu m
+		from sys_menu_stu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
 			 left join sys_role r on r.role_id = ur.role_id
@@ -117,7 +117,7 @@
 	</select>
 	
 	<select id="hasChildByMenuId" resultType="Integer">
-	    select count(1) from sys_menu where parent_id = #{menuId}  
+	    select count(1) from sys_menu_stu where parent_id = #{menuId}
 	</select>
 	
 	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
@@ -126,7 +126,7 @@
 	</select>
 	
 	<update id="updateMenu" parameterType="SysMenu">
-		update sys_menu
+		update sys_menu_stu
 		<set>
 			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
 			<if test="parentId != null">parent_id = #{parentId},</if>
@@ -149,7 +149,7 @@
 	</update>
 
 	<insert id="insertMenu" parameterType="SysMenu">
-		insert into sys_menu(
+		insert into sys_menu_stu(
 		<if test="menuId != null and menuId != 0">menu_id,</if>
 		<if test="parentId != null and parentId != 0">parent_id,</if>
 		<if test="menuName != null and menuName != ''">menu_name,</if>
@@ -189,7 +189,7 @@
 	</insert>
 	
 	<delete id="deleteMenuById" parameterType="Long">
-	    delete from sys_menu where menu_id = #{menuId}
+	    delete from sys_menu_stu where menu_id = #{menuId}
 	</delete>
 
 </mapper> 
\ No newline at end of file