上传和社会网络分析

master
xiaoCJ 2 years ago
parent b8e3d55a57
commit fb8b905b46

@ -7,6 +7,7 @@ import com.hankcs.hanlp.corpus.document.sentence.word.IWord;
import com.hankcs.hanlp.corpus.document.sentence.word.Word; import com.hankcs.hanlp.corpus.document.sentence.word.Word;
import com.ruoyi.biemo.business.domain.Category; import com.ruoyi.biemo.business.domain.Category;
import com.ruoyi.biemo.business.domain.DocInfo; import com.ruoyi.biemo.business.domain.DocInfo;
import com.ruoyi.biemo.mongodb.entity.SplitWordDrill;
import com.ruoyi.biemo.business.service.CategoryService; import com.ruoyi.biemo.business.service.CategoryService;
import com.ruoyi.biemo.business.service.DocInfoService; import com.ruoyi.biemo.business.service.DocInfoService;
import com.ruoyi.biemo.core.page.Page; import com.ruoyi.biemo.core.page.Page;
@ -20,14 +21,17 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
@ -39,6 +43,8 @@ import java.util.Map;
@RequestMapping(value = "/makesoft/docInfo") @RequestMapping(value = "/makesoft/docInfo")
public class DocInfoController extends BaseController { public class DocInfoController extends BaseController {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired @Autowired
private DocInfoService docInfoService; private DocInfoService docInfoService;
@Autowired @Autowired
@ -93,6 +99,9 @@ public class DocInfoController extends BaseController {
public AjaxResult getInfoDelHtml(@PathVariable("id") String docInfoId) throws IOException { public AjaxResult getInfoDelHtml(@PathVariable("id") String docInfoId) throws IOException {
DocInfo docInfo = docInfoService.selectDocInfoById(docInfoId); DocInfo docInfo = docInfoService.selectDocInfoById(docInfoId);
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
if (docInfo == null) {
return AjaxResult.error("未查询到文本");
}
String content = docInfo.getContent(); String content = docInfo.getContent();
content = MyObjects.delHTMLTag(content); content = MyObjects.delHTMLTag(content);
content = MyObjects.delSpace(content); content = MyObjects.delSpace(content);
@ -219,11 +228,30 @@ public class DocInfoController extends BaseController {
public AjaxResult analysis(@PathVariable String id){ public AjaxResult analysis(@PathVariable String id){
return AjaxResult.success(docInfoService.analysis(id,false)); return AjaxResult.success(docInfoService.analysis(id,false));
} }
// @GetMapping("/socialAnalysis")
// public AjaxResult socialAnalysis(@RequestParam String content) {
// return AjaxResult.success(docInfoService.socialAnalysis(content));
// }
//社会网络分析--用户输入
@PostMapping("/socialAnalysis")
public AjaxResult socialAnalysis(@RequestBody String content) {
return AjaxResult.success(docInfoService.socialAnalysis(content));
}
//文章管理--批量分析
@GetMapping("/batchAnalysis/{ids}") @GetMapping("/batchAnalysis/{ids}")
public AjaxResult batchAnalysis(@PathVariable String[] ids){ public AjaxResult batchAnalysis(@PathVariable String[] ids){
return AjaxResult.success(docInfoService.batchAnalysis(ids)); return AjaxResult.success(docInfoService.batchAnalysis(ids));
} }
//社会网络分析
@PostMapping("/socialNetworkAnalysis")
public AjaxResult batchAnalysisByIds(@RequestBody String [] ids) {
return AjaxResult.success(docInfoService.socialNetworkAnalysis(ids));
}
@GetMapping("/summary/{id}") @GetMapping("/summary/{id}")
public AjaxResult summary(@PathVariable String id){ public AjaxResult summary(@PathVariable String id){
return AjaxResult.success(docInfoService.summary(id)); return AjaxResult.success(docInfoService.summary(id));
@ -252,7 +280,40 @@ public class DocInfoController extends BaseController {
return AjaxResult.success("分词成功",docInfo); return AjaxResult.success("分词成功",docInfo);
} }
//分词结果上传
/**
*
*
* @param docInfo
* @return
*/
@PostMapping("/uploadSplitWord")
public AjaxResult uploadsplitWord(@RequestBody DocInfo docInfo) {
Query query = new Query(Criteria.where("_id").is(docInfo.getId()));
Update update = new Update();
update.set("splitWordResult", docInfo.getSplitWordResult());
mongoTemplate.upsert(query, update, DocInfo.class);
return AjaxResult.success("上传成功");
}
/**
*
*
* @param splitWordDrill
* @return
*/
@PostMapping("/uploadSplitWordDrill")
public AjaxResult uploadSplitWordDrill(@RequestBody SplitWordDrill splitWordDrill) {
for (String data : splitWordDrill.getSplitResult()) {
mongoTemplate.updateFirst(
Query.query(Criteria.where("_id").is(splitWordDrill.getId())), // 查询条件
new Update()
.push("splitResult").each(data)
.currentDate("updateTime"),
// .currentTimestamp("updateTime"),
"splitWordDrill");
}
return AjaxResult.success("上传成功");
}
} }

@ -63,4 +63,7 @@ public class DocInfo extends BiemoEntity {
//分词数据 //分词数据
private List<String> analyzeTitle; private List<String> analyzeTitle;
//分词结果
private String splitWordResult;
} }

@ -14,6 +14,7 @@ import com.ruoyi.biemo.mongodb.utils.MongoHelper;
import com.ruoyi.biemo.nlp.DependencyParserUtils; import com.ruoyi.biemo.nlp.DependencyParserUtils;
import com.ruoyi.biemo.nlp.SummaryUtils; import com.ruoyi.biemo.nlp.SummaryUtils;
import com.ruoyi.biemo.utils.MyObjects; import com.ruoyi.biemo.utils.MyObjects;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
@ -49,6 +50,7 @@ public class DocInfoService extends EsService<DocInfo> {
if (Objects.isNull(id) || StringUtil.isEmpty(id)) return null; if (Objects.isNull(id) || StringUtil.isEmpty(id)) return null;
return mongoHelper.findById(id, DocInfo.class); return mongoHelper.findById(id, DocInfo.class);
} }
@Override @Override
public List<DocInfo> batchLoadData(SearchSourceBuilder context, SearchHit[] hitArr) { public List<DocInfo> batchLoadData(SearchSourceBuilder context, SearchHit[] hitArr) {
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
@ -59,14 +61,14 @@ public class DocInfoService extends EsService<DocInfo> {
} }
return mongoHelper.findListByIds(ids, DocInfo.class); return mongoHelper.findListByIds(ids, DocInfo.class);
} }
/** /**
* *
* *
* @param id * @param id
* @return * @return
*/ */
public DocInfo selectDocInfoById(String id) public DocInfo selectDocInfoById(String id) {
{
if (id == null || id.trim().length() == 0) { if (id == null || id.trim().length() == 0) {
return null; return null;
} }
@ -82,8 +84,7 @@ public class DocInfoService extends EsService<DocInfo> {
* @param docInfo * @param docInfo
* @return * @return
*/ */
public List<DocInfo> selectDocInfoList(DocInfo docInfo) public List<DocInfo> selectDocInfoList(DocInfo docInfo) {
{
return esLambdaQuery().eqAll(docInfo).query(); return esLambdaQuery().eqAll(docInfo).query();
} }
@ -103,8 +104,7 @@ public class DocInfoService extends EsService<DocInfo> {
* @param docInfo * @param docInfo
* @return * @return
*/ */
public String insertOrUpdateDocInfo(DocInfo docInfo) public String insertOrUpdateDocInfo(DocInfo docInfo) {
{
String id = mongoHelper.insert(docInfo); String id = mongoHelper.insert(docInfo);
docInfo.setId(id); docInfo.setId(id);
applicationContext.publishEvent(new DocInfoSaveEvent(this, docInfo)); applicationContext.publishEvent(new DocInfoSaveEvent(this, docInfo));
@ -114,6 +114,7 @@ public class DocInfoService extends EsService<DocInfo> {
public void insertBatchEs(List<DocInfo> docInfos) { public void insertBatchEs(List<DocInfo> docInfos) {
insertBatch(docInfos); insertBatch(docInfos);
} }
public void insertEs(DocInfo docInfo) { public void insertEs(DocInfo docInfo) {
List<DocInfo> docInfos = new ArrayList<>(); List<DocInfo> docInfos = new ArrayList<>();
docInfos.add(docInfo); docInfos.add(docInfo);
@ -127,8 +128,7 @@ public class DocInfoService extends EsService<DocInfo> {
* @param ids * @param ids
* @return * @return
*/ */
public void deleteDocInfoByIds(String[] ids) public void deleteDocInfoByIds(String[] ids) {
{
List<String> list = Arrays.stream(ids).collect(Collectors.toList()); List<String> list = Arrays.stream(ids).collect(Collectors.toList());
mongoHelper.deleteByIds(list, DocInfo.class); mongoHelper.deleteByIds(list, DocInfo.class);
applicationContext.publishEvent(new DocInfoDeleteEvent(this, list)); applicationContext.publishEvent(new DocInfoDeleteEvent(this, list));
@ -141,8 +141,7 @@ public class DocInfoService extends EsService<DocInfo> {
* @param id * @param id
* @return * @return
*/ */
public void deleteDocInfoById(String id) public void deleteDocInfoById(String id) {
{
mongoHelper.deleteById(id, DocInfo.class); mongoHelper.deleteById(id, DocInfo.class);
applicationContext.publishEvent(new DocInfoDeleteEvent(this, id)); applicationContext.publishEvent(new DocInfoDeleteEvent(this, id));
} }
@ -232,6 +231,7 @@ public class DocInfoService extends EsService<DocInfo> {
insertOrUpdateDocInfo(docInfo); insertOrUpdateDocInfo(docInfo);
return response; return response;
} }
private Map<String, String> getAllNodes(Set<String> allRelations) { private Map<String, String> getAllNodes(Set<String> allRelations) {
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
Set<String> nodeSets = new HashSet<>(); Set<String> nodeSets = new HashSet<>();
@ -276,7 +276,10 @@ public class DocInfoService extends EsService<DocInfo> {
graph.setRelationships(relationships); graph.setRelationships(relationships);
data.setGraph(graph); data.setGraph(graph);
dataList.add(data); dataList.add(data);
datas.setColumns(new ArrayList<String>(){{add("user");add("entity");}}); datas.setColumns(new ArrayList<String>() {{
add("user");
add("entity");
}});
datas.setData(dataList); datas.setData(dataList);
datass.add(datas); datass.add(datas);
response.setResults(datass); response.setResults(datass);
@ -292,6 +295,24 @@ public class DocInfoService extends EsService<DocInfo> {
return summary; return summary;
} }
// 不用集合耗时293270952500 不用集合耗时245180467700
// }
//社会网络分析
public List<MyResultResponse> socialNetworkAnalysis(String[] ids) {
List<MyResultResponse> list = new ArrayList<>();
long stratTime = System.nanoTime();
if (ids != null && ids.length > 0) {
for (int i = 0; i < ids.length; i++) {
// list.add(analysis(ids[i], true));
list.add(analysis(ids[i], true));
}
}
long endTime = System.nanoTime();
System.out.println("不用集合耗时:" + (endTime - stratTime));
return list;
}
//文章管理--批量分析
public String batchAnalysis(String[] ids) { public String batchAnalysis(String[] ids) {
if(ids!=null&&ids.length>0){ if(ids!=null&&ids.length>0){
for(int i=0;i<ids.length;i++) { for(int i=0;i<ids.length;i++) {
@ -300,4 +321,86 @@ public class DocInfoService extends EsService<DocInfo> {
} }
return "ok"; return "ok";
} }
public MyResultResponse socialAnalysis(String content) {
// String grapData = docInfo.getParserGraphData();
MyResultResponse response = null;
// if(StringUtils.isNotBlank(grapData)&&reAnalysis){
// response = JSONObject.parseObject(grapData,MyResultResponse.class);
// if(response!=null){
// return response;
// }
// }
List<Node> nodes = new ArrayList<>();
List<Relationship> relationships = new ArrayList<>();
//拆句
if (StringUtils.isNotBlank(content)) {
content = MyObjects.delHTMLTag(content);
content = MyObjects.delSpace(content);
String regx = "\n|!|\\.|\\。|\\;|\\|\\|\\,|\\|\\、|\\@|\\#|\\$|\\¥|\\%|\\&|\\*|\\(|\\)|\\=|\\+|\\-|\\_|\\>|\\<|\\[|\\]|\\【|\\】|\\|\\?|”|\\\"";
String[] strArr = content.split(regx);
Set<String> allRelations = getAllRelations(strArr);
int i = 1;
// Map<String,String> nodesMap = getAllNodes(allRelations);
if (allRelations != null && allRelations.size() > 0) {
for (String relation : allRelations) {
String[] nrn = StringUtils.isNotBlank(relation) ? relation.split(",") : null;
if (nrn == null || nrn.length < 3) {
continue;
}
String nodeName1 = nrn[0];
String relationName = nrn[1];
String nodeName2 = nrn[2];
Node node1 = new Node();
//node1.setId(nodesMap.get(nodeName1));
node1.setId(nodeName1);
node1.setLabels(new ArrayList<String>() {{
add(nodeName1);
}});
node1.setProperties(new HashMap<String, Object>() {{
put("name", nodeName1);
put("email", "9094908@qq.com");
}});
Node node2 = new Node();
node2.setId(nodeName2);
node2.setLabels(new ArrayList<String>() {{
add(nodeName2);
}});
node2.setProperties(new HashMap<String, Object>() {{
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(nodeName1);
relationship.setEndNode(nodeName2);
relationship.setProperties(new HashMap<String, Object>() {{
put("source", nodeName1);
put("relation", relationName);
put("target", nodeName2);
}});
relationships.add(relationship);
}
}
// //获取命名实体
// try {
// Map<String,Set<String>> nerTagSet = DependencyParserUtils.getMyNERTagSet(strArr);
// docInfo.setParserNamedEntity(JSONObject.toJSONString(nerTagSet));
// docInfo.setSummary(SummaryUtils.autoSummary(content));
// } catch (Exception e) {
// e.printStackTrace();
// }
}
response = returnResponse(nodes, relationships);
// docInfo.setParserGraphData(JSONObject.toJSONString(response));
// docInfo.setStatus(1);
// insertOrUpdateDocInfo(docInfo);
return response;
}
} }

@ -0,0 +1,21 @@
package com.ruoyi.biemo.mongodb.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection ="splitWordDrill")
public class SplitWordDrill {
@Id
private final String id = "6466d460f07e000095000787";
@Field
private String [] splitResult;
@Field
private String updateTime;
}
Loading…
Cancel
Save