Add File
This commit is contained in:
@@ -0,0 +1,77 @@
|
|||||||
|
package org.dromara.easyai.naturalLanguage.languageCreator;
|
||||||
|
|
||||||
|
import org.dromara.easyai.gameRobot.Action;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WordRight extends Action {
|
||||||
|
private List<String> keyWords;
|
||||||
|
private List<String> finishWords;//终结态词集合
|
||||||
|
|
||||||
|
public WordRight(List<String> keyWords, List<String> finishWords) {
|
||||||
|
this.keyWords = keyWords;
|
||||||
|
this.finishWords = finishWords;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getActionId() {
|
||||||
|
return super.getActionId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setActionId(int actionId) {
|
||||||
|
super.setActionId(actionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<int[]> action(int[] stateId) {
|
||||||
|
int id = stateId[0];
|
||||||
|
String myWord = keyWords.get(id - 1);
|
||||||
|
int len = myWord.length() + 1;
|
||||||
|
int size = keyWords.size();
|
||||||
|
List<int[]> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
String word = keyWords.get(i);
|
||||||
|
if (word.length() == len && word.substring(0, len - 1).equals(myWord)) {
|
||||||
|
list.add(new int[]{i + 1});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isFinish(String myWord) {
|
||||||
|
boolean isHere = false;
|
||||||
|
for (String finishWord : finishWords) {
|
||||||
|
if (finishWord.hashCode() == myWord.hashCode() && finishWord.equals(myWord)) {
|
||||||
|
isHere = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isHere;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getProfit(int[] stateId) {
|
||||||
|
int allProfit = 0;
|
||||||
|
List<int[]> states = action(stateId);
|
||||||
|
if (states.isEmpty()) {
|
||||||
|
allProfit = -10;
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < states.size(); i++) {
|
||||||
|
int nextID = states.get(i)[0];
|
||||||
|
if (nextID > 0) {
|
||||||
|
String myWord = keyWords.get(nextID - 1);//查看是否为终结态
|
||||||
|
if (isFinish(myWord)) {//是终结态
|
||||||
|
allProfit = allProfit + 10;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
allProfit = allProfit - 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allProfit = allProfit / states.size();
|
||||||
|
}
|
||||||
|
return allProfit;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user