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
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
本软件对物体在图像中进行训练及识别,切割,定位的轻量级,面向小白的框架
(162个子文件)
.gitignore 1KB
CatchKeyWord.java 23KB
NerveJumpManager.java 22KB
MatrixOperation.java 20KB
NerveManager.java 20KB
Nerve.java 19KB
Watershed.java 16KB
Nerve.java 14KB
NerveManager.java 14KB
Distinguish.java 14KB
Matrix.java 13KB
Tokenizer.java 13KB
Tree.java 12KB
Nerve.java 12KB
DynamicProgramming.java 12KB
CustomManager.java 12KB
Forest.java 11KB
MP3.java 9KB
RegressionForest.java 9KB
RGBNorm.java 9KB
RRNerveManager.java 8KB
PSO.java 8KB
Talk.java 8KB
SentenceCreator.java 7KB
OutNerve.java 6KB
SemanticsNerve.java 6KB
WordEmbedding.java 6KB
MyKeyWord.java 5KB
OutNerve.java 5KB
OutNerve.java 5KB
LVQ.java 4KB
RandomForest.java 4KB
Picture.java 4KB
Knn.java 4KB
WordTemple.java 4KB
RecommendCodeManager.java 4KB
NerveCenter.java 4KB
Frequency.java 4KB
FoodConfig2.java 4KB
ThreeChannelMatrix.java 3KB
HiddenNerve.java 3KB
FastPictureExcerpt.java 3KB
SentenceConfig.java 3KB
SoftMax.java 3KB
WaveFile.java 3KB
Box.java 3KB
MeanClustering.java 3KB
TemplateReader.java 3KB
GMClustering.java 3KB
RgbRegression.java 3KB
NMS.java 3KB
LinearRegression.java 3KB
SoftMax.java 3KB
SoftMax.java 2KB
ModelParameter.java 2KB
HiddenNerve.java 2KB
RegionBody.java 2KB
ModelParameter.java 2KB
WordRight.java 2KB
WordLeft.java 2KB
Config.java 2KB
DataTable.java 2KB
ModelParameter.java 2KB
Sentence.java 2KB
HiddenNerve.java 2KB
DynamicState.java 2KB
SensoryNerve.java 2KB
IdCreator.java 2KB
WordModel.java 2KB
ArithUtil.java 1KB
SensoryNerve.java 1KB
LangBody.java 1KB
SensoryNerve.java 1KB
Model.java 1KB
WordMatrix.java 1KB
PicturePosition.java 1KB
WorldBody.java 943B
RegionBack.java 918B
WordBack.java 851B
OutBack.java 815B
CreatorWord.java 786B
RandomModelParameter.java 742B
RandomNerveBody.java 732B
Word.java 727B
SentenceModel.java 716B
CodeBack.java 704B
NerveStudy.java 692B
NerveStudy.java 688B
NerveStudy.java 685B
SemanticsBack.java 680B
RandomModel.java 658B
ConvBack.java 654B
KeyWordModel.java 624B
CreatorSentenceModel.java 624B
MyWordFeature.java 606B
TanHX.java 596B
RGB.java 590B
FoodPicture.java 589B
CreatorModel.java 586B
WordTwoVectorModel.java 584B
共 162 条
- 1
- 2
资源评论
- JKK2152024-05-14资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6742
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功