package org.wlld.naturalLanguage.languageCreator;
import org.wlld.entity.DyStateModel;
import org.wlld.entity.KeyWordForSentence;
import org.wlld.gameRobot.Action;
import org.wlld.gameRobot.DynamicProgramming;
import org.wlld.gameRobot.DynamicState;
import java.util.*;
public class CatchKeyWord {//抓取关键词
private final DynamicProgramming dynamicProgramming = new DynamicProgramming();//保存它的状态集合
private final List<String> keyWords = new ArrayList<>();//保存词列表
private final List<String> finishWords = new ArrayList<>();//终结态词集合
private final Set<String> noList = new HashSet<>();//禁止词集合
private double proTh = 0.1;//收益阈值
public void setProTh(double proTh) {
this.proTh = proTh;
}
public void study(List<KeyWordForSentence> keyWordForSentenceList) {
int size = keyWordForSentenceList.size();
List<DynamicState> dynamicStateList = dynamicProgramming.getDynamicStateList();
DynamicState dynamicState0 = new DynamicState(new int[]{0});
dynamicState0.setFinish(true);
dynamicStateList.add(dynamicState0);
for (int i = 0; i < size; i++) {//添加禁止词
KeyWordForSentence keyWords = keyWordForSentenceList.get(i);
noList.add(keyWords.getKeyWord());
}
for (int i = 0; i < size; i++) {
KeyWordForSentence keyWords = keyWordForSentenceList.get(i);
String sentence = keyWords.getSentence();//句子
String keyWord = keyWords.getKeyWord();//关键词
int startIndex = getIndex(sentence, keyWord);
if (startIndex >= 0) {
creatID(sentence, startIndex, startIndex + keyWord.length() - 1);
}
}
Map<Integer, Action> actionMap = dynamicProgramming.getActionMap();
WordRight wordRight = new WordRight(keyWords, finishWords);
WordLeft wordLeft = new WordLeft(keyWords, finishWords);
wordRight.setActionId(1);
wordLeft.setActionId(2);
actionMap.put(1, wordRight);
actionMap.put(2, wordLeft);
dynamicProgramming.gameStart();//探索中奖
dynamicProgramming.strategyStudy();//研究策略中奖
}
private WordsValue isContinuity(int start1, int end1, int start2, int end2) {
boolean isContinuity = false;
WordsValue wordsValue = null;
if (end1 + 1 == start2 || end2 + 1 == start1) {//相接
isContinuity = true;
} else if ((start2 >= start1 && start2 <= end1) || (end2 >= start1 && end2 <= end1) ||
(start1 >= start2 && start1 <= end2) || (end1 >= start2 && end1 <= end2)) {//相交
isContinuity = true;
}
if (isContinuity) {
wordsValue = new WordsValue();
wordsValue.isMerge = false;
wordsValue.startIndex = Math.min(start1, start2);
wordsValue.endIndex = Math.max(end1, end2);
}
return wordsValue;
}
private void mergeWord(List<WordsValue> myDyList) {//合并状态
for (int i = 0; i < myDyList.size(); i++) {
WordsValue dynamicState = myDyList.get(i);
if (!dynamicState.isMerge) {
for (int j = 0; j < myDyList.size(); j++) {
if (j != i) {
int startIndex = dynamicState.startIndex;//开始下标
int endIndex = dynamicState.endIndex;//结束下标
boolean isFinish = dynamicState.isFinish;
double value = dynamicState.value;
WordsValue dynamic = myDyList.get(j);
int myStart = dynamic.startIndex;
int myEnd = dynamic.endIndex;
WordsValue wordsValue = isContinuity(startIndex, endIndex, myStart, myEnd);
if (wordsValue != null) {//可进行合并
dynamic.isMerge = true;
wordsValue.isFinish = isFinish || dynamic.isFinish;
if (wordsValue.isFinish) {
wordsValue.value = 10;
} else {
wordsValue.value = Math.max(dynamic.value, value);
}
dynamicState = wordsValue;
}
}
}
myDyList.set(i, dynamicState);//替换合并后的结果
}
}
for (int i = 0; i < myDyList.size(); i++) {
if (myDyList.get(i).isMerge) {
myDyList.remove(i);
i--;
}
}
}
public KeyWordModel getModel() {
KeyWordModel keyWordModel = new KeyWordModel();
List<DyStateModel> dyStateModels = new ArrayList<>();
List<DynamicState> dynamicStateList = dynamicProgramming.getDynamicStateList();
for (DynamicState dynamicState : dynamicStateList) {
DyStateModel dyStateModel = new DyStateModel();
dyStateModel.setId(dynamicState.getStateId()[0]);
dyStateModel.setFinish(dynamicState.isFinish());
dyStateModel.setValue(dynamicState.getValue());
dyStateModels.add(dyStateModel);
}
keyWordModel.setDynamicStateList(dyStateModels);
keyWordModel.setKeyWords(keyWords);
return keyWordModel;
}
public void insertModel(KeyWordModel keyWordModel) {
List<String> myKeyWords = keyWordModel.getKeyWords();
List<DyStateModel> dynamicStates = keyWordModel.getDynamicStateList();
List<DynamicState> dynamicStateList = dynamicProgramming.getDynamicStateList();
keyWords.addAll(myKeyWords);
for (DyStateModel modelDy : dynamicStates) {
DynamicState dynamicState = new DynamicState(new int[]{modelDy.getId()});
dynamicState.setValue(modelDy.getValue());
dynamicState.setFinish(modelDy.isFinish());
dynamicStateList.add(dynamicState);
}
}
private void insertValue(WordsValue wordsValue, DynamicState dynamicState, int startIndex, int endIndex) {//传输数值
wordsValue.isFinish = dynamicState.isFinish();
wordsValue.value = dynamicState.getValue();
wordsValue.startIndex = startIndex;
wordsValue.endIndex = endIndex;
wordsValue.id = dynamicState.getStateId()[0];
wordsValue.isMerge = false;
}
private List<WordsValue> getBestDyRight(String sentence) {
List<WordsValue> myDyList = new ArrayList<>();
List<DynamicState> dynamicStateList = dynamicProgramming.getDynamicStateList();
int size = sentence.length() - 1;
for (int i = size; i >= 0; i--) {
WordsValue maxDy = null; //0,1,2,3
for (int j = i; j >= 0; j--) {//我是好人
String word = sentence.substring(j, i + 1);//对该词进行收益判定
DynamicState dynamicState = getDynamicState(word, dynamicStateList);
if (dynamicState != null && dynamicState.getValue() > proTh) {
//System.out.println("word:" + word + ",value:" + dynamicState.getValue());
if (maxDy == null) {
maxDy = new WordsValue();
//System.out.println("第一次:" + word);
insertValue(maxDy, dynamicState, j, i);
} else {//先查询是否为终结态,若终结态跳出
if (dynamicState.isFinish()) {//当前为终结态
//System.out.println("终结态:" + word);
insertValue(maxDy, dynamicState, j, i);
break;
} else {//当前不是终结态
int index = sentence.indexOf(word);
double myValue = ma
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java傻瓜ai框架,无需任何算法知识,通过简单的api调用就可以实现 常用的图像内物体的识别,定位等图像ai服务,及自然语言分类处理服务。面向java开发程序员,不依赖任何第三方库,第三方接口,独立包。
资源推荐
资源详情
资源评论























收起资源包目录





































































































共 162 条
- 1
- 2
资源评论


Java程序员-张凯
- 粉丝: 1w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 浅析网络环境下开展区域性校本培训的主要任务.doc
- 国家开放大学电大《教育学》网络课形考任务1作业及答案.docx
- 企业软件定制开发解决方案(20211215112015).pdf
- 交通行业招投标信息化解决方案研究.doc
- 用友财务软件操作流程处理.doc
- 智慧城市建设调研提纲.doc
- 开启“互联网”模式助力安全生产监管.docx
- 计算机说明文-[基于计算机的插图工具对科学说明文的意义建构的影响]-.doc
- 开题报告杨毅敏基于单片机的多参数实时数据采集系统设计.doc
- 服装行业网络营销分析6.docx
- 2023年华中科技大学研究生入学考试计算机网络试题.doc
- 饭店计算机信息管理第章饭店信息化建设及其案例分析.ppt
- 区块链技术的调研综述报告样本.doc
- 企业信息化规划过程分解与应用.doc
- 建设工程项目管理教案.doc
- 学生成绩管理系统代码(c语言编写).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
