【无标题】

10 篇文章 0 订阅

1,创建普通maven工程

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kjgs</groupId>
    <artifactId>language</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
    </dependencies>
</project>

可行性分析

package 入口;

import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import 实体.Dongzuo;
import 实体.成分;
import 工具.Util;
import 工具.常量;
import 工具.父子节点排序;
import 执行.处理方法;

import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;

public class 可行性分析 {
    static Scanner scanner = new Scanner(System.in);
    public static CopyOnWriteArrayList<成分> chengfenList = new CopyOnWriteArrayList<成分>();
    public static Stack<Dongzuo> 动作集合 = new Stack<>();
    public static String 上一步结果 = "";
    public static String 集合数据 = "";
    public static Set<String> methodnames = new HashSet<>();
    public static CopyOnWriteArrayList<String> 方法集合 = null;
    public static String[] chengfenFilenames = {"D:/my/kjgs/chengfen17.txt", "D:/my/kjgs/chengfen18.txt"};
    public static String dongzuoFilename = "D:/my/kjgs/dongzuo.txt";

    public static void main(String[] args) {
        init();
        while (true) {
            System.out.println("请输入:");
            String sen = scanner.nextLine();
            Util.增加成分(new 成分().setRenwu(常量.当前输入句子).setShuxing(sen).setGuanxi(常量.));
            int flag = 0;//0 成功,1 逻辑执行意向,2 逻辑是空
            if (sen.trim().equals(常量.待解释词是空)) {
                方法集合 = Util.依次找方法(methodnames, sen);
                if (CollectionUtils.isEmpty(方法集合)) {
                    flag = 2;
                } else {
                    Util.增加成分(new 成分().setRenwu(常量.当前句子).setShuxing(sen).setGuanxi(常量.).setExplained(Util.获取最新成分属性(常量.待解释词)));
                    try {
                        Util.执行方法逻辑(方法集合);
                    } catch (Exception e) {
                        System.out.println(Util.获取最新成分属性(常量.内部方法的错误信息));
                        e.printStackTrace();
                    }
                    continue;
                }
            } else {
                try {
                    String 预处理逻辑 = Util.获取成分人物(常量.预处理逻辑, 常量.);
                    List<String> list = JSON.parseArray(预处理逻辑, String.class);
                    父子节点排序.父子节点排序(list, 常量.前面);
                    Map<String, List<String>> 预处理逻辑集合 = Util.获取预处理逻辑(list);
                    List<String> 预处理结果list = Util.获取预处理逻辑并依次执行(预处理逻辑集合, false);
                    预处理结果list = Util.筛选预处理结果中的有逻辑处理的(预处理结果list);
                    if (Util.获取等于内部方法的句子(sen) != null) 预处理结果list.add(sen);
                    Util.增加成分(new 成分().setRenwu(常量.预处理结果).setShuxing(JSON.toJSONString(预处理结果list)).setGuanxi(常量.));
                } catch (Exception e) {
                    System.out.println((Util.获取最新成分属性(常量.预处理结果)));
                    e.printStackTrace();
                }
                String 预处理结果 = Util.获取最新成分属性(常量.预处理结果);
                if (StringUtils.isEmpty(预处理结果) || "[]".equals(预处理结果)) {
                    flag = 2;
                } else {
                    if (!常量..equals(Util.获取最新成分属性(常量.待解释词)) && StringUtils.isNotEmpty(Util.获取最新成分属性(常量.待解释词))) {
                        Util.增加成分(new 成分().setRenwu(常量.当前句子).setShuxing(sen).setGuanxi(常量.).setExplained(Util.获取最新成分属性(常量.待解释词)));
                    }
                    Util.增加成分(new 成分().setRenwu("------------------start----------------").setShuxing("用历史逻辑处理").setGuanxi(常量.));
                    try {
                        if(Util.执行思维集合(预处理结果,true)){
                            flag=0;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    Util.增加成分(new 成分().setRenwu("--------------------end------------ -").setShuxing("用历史逻辑处理").setGuanxi(常量.));
                }
            }
            if (flag == 1) {
                System.out.println((Util.获取最新成分属性(常量.内部方法的错误信息)));
            } else if (flag == 2) {
                Util.增加成分(new 成分().setRenwu(常量.组装词1).setShuxing(sen).setGuanxi(常量.));
                Util.增加成分(new 成分().setRenwu(常量.组装词2).setShuxing(常量.是什么).setGuanxi(常量.));
                try {
                    Util.反射执行指定方法(常量.组装句子);
                    Util.增加成分(new 成分().setRenwu(常量.疑问句子).setShuxing(Util.获取最新成分属性(常量.上一步结果)).setGuanxi(常量.));
                } catch (Exception e) {
                    System.out.println((Util.获取最新成分属性(常量.内部方法的错误信息)));
                    e.printStackTrace();
                }
                System.out.println((Util.获取最新成分属性(常量.上一步结果)));
            }

        }
}

    public static void init() {
        Method[] declaredmethods = 处理方法.class.getDeclaredMethods();
        for (Method m : declaredmethods) {
            methodnames.add(m.getName());
        }
        try {
            for (String filename : 可行性分析.chengfenFilenames) {
                CopyOnWriteArrayList<成分> collect = Util.readFileByLine(filename)
                        .stream().filter(m -> StringUtils.isNotEmpty(m))
                        .map(m -> JSON.parseObject(m, 成分.class))
                        .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
                if (CollectionUtils.isNotEmpty(collect)) {
                    chengfenList.addAll(collect);
                }
            }
            动作集合 = Util.readFileByLine(可行性分析.dongzuoFilename).stream()
                    .filter(m -> StringUtils.isNotEmpty(m)).map(m -> JSON.parseObject(m, Dongzuo.class))
                    .collect(Collectors.toCollection(Stack::new));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing(常量.TRUE).setGuanxi(常量.));
        Util.增加成分(new 成分().setRenwu(常量.待解释词).setShuxing(常量.).setGuanxi(常量.));
    }
}

Dongzuo

package 实体;

public class Dongzuo {
    public String sen;
    public String methodName;
    public Integer paramNum;
    public String param1;
    public String param2;

    public String getSen() {
        return sen;
    }

    public Dongzuo setSen(String sen) {
        this.sen = sen;return this;
    }

    public String getMethodName() {
        return methodName;
    }

    public Dongzuo setMethodName(String methodName) {
        this.methodName = methodName;return this;
    }

    public Integer getParamNum() {
        return paramNum;
    }

    public Dongzuo setParamNum(Integer paramNum) {
        this.paramNum = paramNum;return this;
    }

    public String getParam1() {
        return param1;
    }

    public Dongzuo setParam1(String param1) {
        this.param1 = param1;return this;
    }

    public String getParam2() {
        return param2;
    }

    public Dongzuo setParam2(String param2) {
        this.param2 = param2;return this;
    }
}

成分

package 实体;

import java.lang.reflect.Field;
import java.util.Objects;

public class 成分 {
    public String shuxing;
    public String renwu;
    public String guanxi;
    public Integer sxindex=1;
    public Integer rwindex=1;
    public String juzi;
    public String fujuzi;
    public String wenju;
    public String explained;

    public Object getValue(Object object,String fieldName){
        try{
            Field field=object.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            try {
                return field.get(object);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }catch (NoSuchFieldException e){

        }
        return null;
    }
    public <T> void setValue(T t,String fieldName,Object value){
        Class<T> tClass=(Class<T>)t.getClass();
        Field declaredField = null;
        try {
            declaredField = tClass.getDeclaredField(fieldName);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        declaredField.setAccessible(true);
        try {
            declaredField.set(t,value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    public String getShuxing() {
        return shuxing;
    }

    public 成分 setShuxing(String shuxing) {
        this.shuxing = shuxing;return this;
    }

    public String getRenwu() {
        return renwu;
    }

    public 成分 setRenwu(String renwu) {
        this.renwu = renwu;return this;
    }

    public String getGuanxi() {
        return guanxi;
    }

    public 成分 setGuanxi(String guanxi) {
        this.guanxi = guanxi;return this;
    }

    public Integer getSxindex() {
        return sxindex;
    }

    public 成分 setSxindex(Integer sxindex) {
        this.sxindex = sxindex;return this;
    }

    public Integer getRwindex() {
        return rwindex;
    }

    public 成分 setRwindex(Integer rwindex) {
        this.rwindex = rwindex;return this;
    }

    public String getJuzi() {
        return juzi;
    }

    public 成分 setJuzi(String juzi) {
        this.juzi = juzi;return this;
    }

    public String getFujuzi() {
        return fujuzi;
    }

    public 成分 setFujuzi(String fujuzi) {
        this.fujuzi = fujuzi;return this;
    }

    public String getWenju() {
        return wenju;
    }

    public 成分 setWenju(String wenju) {
        this.wenju = wenju;return this;
    }

    public String getExplained() {
        return explained;
    }

    public 成分 setExplained(String explained) {
        this.explained = explained;return this;
    }

    public boolean equals(成分 obj) {
       if(obj.renwu.equals(this.renwu) &&
       obj.shuxing.equals(this.shuxing)
       && obj.guanxi.equals(this.guanxi)){
           return true;
       }
       return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(shuxing, renwu, guanxi, sxindex, rwindex, juzi, fujuzi, wenju, explained);
    }
}

Util

package 工具;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import 入口.可行性分析;
import 实体.成分;
import 执行.处理方法;

import java.io.*;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Util {
    static 处理方法 obj = new 处理方法();
    static Class clz=obj.getClass();
    static String 当前句子方法集合="";
    public static List 获取句子中包含的方法(String sen){
        return Util.依次找方法(可行性分析.methodnames,sen);
    }
//    public static boolean 判断两个词是否在关系链中(String 人物,String 属性,String 关系){
//        递归获取关系属性();
//    }
    public static List<String> 根据元素分类过滤集合(List<String> 集合数据,String 属性){
        return 集合数据.stream().filter(m-> CollectionUtils.isNotEmpty(JSON.parseArray(获取成分关系(m,属性),String.class))).collect(Collectors.toList());
    }
    public static List<String> 递归获取关系属性(String 属性,String 关系){
        List<String> list = JSON.parseArray(获取成分人物(属性,关系),String.class);
        if(CollectionUtils.isNotEmpty(list)){
            递归获取关系属性(关系,new ArrayList(){{
                addAll(list);
            }},list);
        }
        return list;
    }

    public static void 递归获取关系属性(String 关系, List<String> 集合数据, List<String> 全部集合数据) {
        for(String str:集合数据){
            List<String> list = JSON.parseArray(获取成分人物(str,关系),String.class);
            if(CollectionUtils.isNotEmpty(list)){
                全部集合数据.addAll(list);
                递归获取关系属性(关系,list,全部集合数据);
            }
        }
    }
    public static String 替换句子中的相似词(String sen){
        sen = sen.replace("二","2");
        sen = sen.replace("一","1");
        String fianlSen = sen;
        return JSON.toJSONString(new ArrayList(){{
            add(fianlSen);
        }});
    }
    public static boolean 历史逻辑处理前的判断(boolean 是否添加当前句子)throws Exception{
        获取判断逻辑并依次执行(是否添加当前句子);
        return true;
    }
    public static String 获取等于内部方法的句子(String sen){
        if(可行性分析.methodnames.contains(sen)){
            return sen;
        }
        return null;
    }
    public static List<String> 筛选预处理结果中的有逻辑处理的(List<String> 预处理结果list){
        return 预处理结果list.stream().filter(m->{
            String 逻辑集合 = 获取待解释词(m);
            if(StringUtils.isNotEmpty(逻辑集合)){
                if(CollectionUtils.isNotEmpty(JSON.parseArray(逻辑集合,String.class))){
                    return true;
                }
            }
            return false;
        }).collect(Collectors.toList());
    }
    public static void 获取判断逻辑并依次执行(boolean 是否添加当前句子) throws  Exception{
        String 预处理逻辑=获取成分人物(常量.判断逻辑, 常量.);
        List<String> list =JSON.parseArray(预处理逻辑,String.class);
        Map<String,List<String>> 预处理逻辑集合 = 获取预处理逻辑(list);
        for(Map.Entry entry:预处理逻辑集合.entrySet()){
            执行思维集合(JSON.toJSONString(entry.getValue()),是否添加当前句子);
        }
    }
    public static List<String> 获取预处理逻辑并依次执行(Map<String,List<String>> 预处理逻辑集合,boolean 是否添加当前句子)throws Exception{
        //对预处理结果排序
        List<String> 预处理结果list =new ArrayList<>();
        for(Map.Entry entry:预处理逻辑集合.entrySet()){
            //有处理逻辑了,就不往下找了
            if(CollectionUtils.isNotEmpty(预处理结果list)){
                break;
            }
            执行思维集合(JSON.toJSONString(entry.getValue()),是否添加当前句子);
            String 上一步结果 = Util.获取最新成分属性(常量.上一步结果);
            List<String> 上一步结果list =JSON.parseArray(如果不能转list就加入(上一步结果),String.class);
            if(CollectionUtils.isNotEmpty(上一步结果list)){
                预处理结果list.addAll(上一步结果list);
            }
        }
        预处理结果list = 预处理结果list.stream().distinct().collect(Collectors.toList());
        return 预处理结果list;
    }
    public static String 如果不能转list就加入(String str){
        try{
            List<Object> list = JSON.parseArray(str, Object.class);
            return JSON.toJSONString(list);
        }catch (JSONException E){
            return JSON.toJSONString(new ArrayList(){{
                add(str);
            }});
        }
    }
    public static void 获取逻辑并依次执行(String sen,boolean 是否添加当前句子)throws Exception{
        Map<String,List<String>> 处理逻辑集合 = 获取处理逻辑(sen);
        for(Map.Entry<String,List<String>> entry:处理逻辑集合.entrySet()){
            if(entry.getValue() !=null && entry.getValue().contains(sen)){
                continue;
            }
            if(entry.getValue() !=null && 是否添加当前句子){
                Util.增加成分(new 成分().setRenwu(常量.当前输入句子).setShuxing(entry.getKey()).setGuanxi(常量.));
            }
            执行思维集合(JSON.toJSONString(entry.getValue()),是否添加当前句子);
        }
    }

    public static Map<String,List<String>> 获取预处理逻辑(List<String> list){
        Map<String,List<String>> map = new LinkedHashMap<>();
        for(String luoji:list){
            map.put(luoji,JSON.parseArray(获取待解释词(luoji),String.class));
        }
        return map;
    }
    public static Map<String,List<String>> 获取处理逻辑 (String sen){
        Map<String,List<String>> map =new HashMap<>();
        map.put(sen,JSON.parseArray(获取待解释词(sen),String.class));
        return map;
    }
    public static boolean 执行思维集合(String json,boolean 是否添加当前句子) throws Exception{
        //递归执行,如果执行思维语句中包含子思维,则递归执行
        List<String> collect = JSON.parseArray(json,String.class);
        if(CollectionUtils.isEmpty(collect)){
            return false;
        }
        for(String sen:collect){
            Util.增加成分(new 成分().setRenwu(常量.当前句子).setShuxing(sen).setGuanxi(常量.));
            获取逻辑并依次执行(sen,是否添加当前句子);
            CopyOnWriteArrayList<String> 方法集合 =依次找方法(可行性分析.methodnames,sen);
            String 当前句子方法集合 =JSON.toJSONString(方法集合);
            Util.历史逻辑处理前的判断(是否添加当前句子);
            if(StringUtils.isNotEmpty(当前句子方法集合)){
                Util.执行方法逻辑(JSON.parseArray(当前句子方法集合,String.class));
            }
        }
        return true;
    }

    public static boolean 执行思维集合2(String json){
        List<String> collect =JSON.parseArray(json,String.class);
        if(CollectionUtils.isEmpty(collect)){
            return false;
        }
        for(String sen:collect){
            Util.增加成分(new 成分().setRenwu(常量.当前句子).setShuxing(sen).setGuanxi(常量.));
            CopyOnWriteArrayList<String> 方法集合 = 依次找方法(可行性分析.methodnames,sen);
            try{
                int 执行的方法个数 = Util.执行方法逻辑(方法集合);
            }catch (Exception e){
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }

    public static String 获取最新句子思维集合(String 句子){
        AtomicInteger index =new AtomicInteger(0);
        成分 chengfen = 可行性分析.chengfenList.stream().filter(m ->{
            index.getAndIncrement();
            return m!=null && m.shuxing !=null && m.shuxing.equals(句子) && m.shuxing.startsWith(常量.输入是);
        }).findFirst().orElse(null);
        if(null == chengfen) return null;
        int startindex =  获取下一次输入下标(index.get(), 常量.输入是);
        List<成分> list = 可行性分析.chengfenList.subList(startindex,index.get());
        List<String> collect = list.stream().filter(m->m!=null && m.renwu !=null && m.renwu.equals(常量.当前句子))
                .map(m->m.shuxing).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }

    private static int 获取下一次输入下标(int index,String 判断词){
        for(int i=index -1;i==0;i--){
            成分 m = 可行性分析.chengfenList.get(i);
            if(m!=null && m.shuxing!=null && m.shuxing.startsWith(判断词))return i+1;
        }
        return 0;
    }

    public static int 执行方法逻辑(List<String> 方法集合) throws Exception{
        int num =0;
        for(int i=0;i<方法集合.size();i++){
            num++;
            String methodname = 方法集合.get(i);
            反射执行指定方法(methodname);
        }
        return num;
    }
    public static void 反射执行指定方法(String methodname) throws Exception{
        clz.getDeclaredMethod(methodname).invoke(obj);
    }
    public static void 方法出错对变量的处理(){}
    public static void 获取当前方法中的变量(String... args){
        List<String> list =new ArrayList<>();
        for(int i=0;i<args.length;i++){
            list.add(args[i]);
        }
        Util.增加成分(new 成分().setRenwu(常量.方法变量集合).setShuxing(JSON.toJSONString(list)).setGuanxi(常量.));
    }
    public static 成分 获取指定下标(int index){
        return 可行性分析.chengfenList.get(index);
    }
    public static 成分 获取最新成分(String renwu){
        成分 chengfen = 可行性分析.chengfenList.stream().filter(m->m!=null && renwu.equals(m.renwu)).findFirst().orElse(null);
        return chengfen;
    }
    public static String 获取最新成分属性(String renwu){
        if(StringUtils.isNotEmpty(renwu) && 常量.上一步结果.equals(renwu)){
            return 可行性分析.上一步结果;
        }
        if(StringUtils.isNotEmpty(renwu) && 常量.集合数据.equals(renwu)){
            return 可行性分析.集合数据;
        }
        成分 chengfen = 可行性分析.chengfenList.stream().filter(m->m !=null && renwu.equals(m.renwu))
                .findFirst().orElse(null);
        if(null != chengfen){
            return chengfen.shuxing;
        }
        return null;
    }

    public static String 动态查询字段所有值(String 字段名){
        List<Object> collect=可行性分析.chengfenList.stream().filter(m->m!=null)
                .map(m->m.getValue(m,字段名)).filter(m->m!=null).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }
    public static String 获取最新的一组逻辑集合(String 待解释词){
        List<成分> result =获取待解释词成分(待解释词,true);
        if(CollectionUtils.isEmpty(result)){
            return null;
        }
        List<String> collect = result.stream().map(m->m.getShuxing()).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }
    public static List<String> 获取所有有逻辑的被解释词(){
        Map<String,List<成分>> collect = 可行性分析.chengfenList.stream().filter(m->m!=null && StringUtils.isNotEmpty(m.explained))
                .collect(Collectors.groupingBy(成分::getExplained));
        List<String> collect1=collect.entrySet().stream().filter(m->m.getValue().size()>1 && 常量.待解释词是空.equals(m.getValue().get(0).getShuxing()))
                .map(m->m.getKey()).distinct().collect(Collectors.toList());
        return collect1;
    }
    //获取待解释词必须要以“待解释词是空”结尾
    public static String 获取待解释词(String 待解释词){
        List<成分> result = 获取待解释词成分(待解释词,false);
        if(CollectionUtils.isEmpty(result)){
            return null;
        }
        List<String> collect = result.stream().map(m-> m.getShuxing()).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }
    //根据 待解释词是空 区分多组 待解释词逻辑,取最新的
    public static List<成分> 获取待解释词成分(String 待解释词, boolean 是否加入待解释词是空){
        List<成分> collect = 可行性分析.chengfenList.stream().filter(m->m!=null && 待解释词 !=null
        && 待解释词.equals(m.explained)).collect(Collectors.toList());
        if(CollectionUtils.isEmpty(collect)){
            return null;
        }
        Collections.reverse(collect);
        Map<Integer,Integer> 待解释词是空在逻辑中的位置 =new HashMap<>();
        int num=0;
        for(int i=0;i<collect.size();i++){
            if(collect.get(i) !=null && 常量.待解释词是空.equals(collect.get(i).getShuxing())){
                num++;
                待解释词是空在逻辑中的位置.put(num,i);
            }
        }
        if(num<1){
            return null;
        }
        if(是否加入待解释词是空){
            if(待解释词是空在逻辑中的位置.get(num-1)==null){
                return collect.subList(0,待解释词是空在逻辑中的位置.get(num)+1);
            }else {
                return collect.subList(待解释词是空在逻辑中的位置.get(num-1)+1,待解释词是空在逻辑中的位置.get(num)+1);
            }
        }else{
            if(待解释词是空在逻辑中的位置.get(num-1)==null){
                return collect.subList(0,待解释词是空在逻辑中的位置.get(num));
            }else {
                return collect.subList(待解释词是空在逻辑中的位置.get(num-1)+1,待解释词是空在逻辑中的位置.get(num));
            }
        }
    }
    public static String 获取有逻辑的待解释词(String 待解释词){
        List<成分> result = 获取待解释词成分(待解释词,false);
        if(CollectionUtils.isNotEmpty(result)){
            return result.get(0).getExplained();
        }
        return null;
    }

    public static String 根据关系查询人物(String 关系){
        List<String> collect =可行性分析.chengfenList.stream().filter(m -> m!=null &&
                关系.equals(m.guanxi)).map(m->m.renwu).collect(Collectors.toList());
        return JSON.toJSONString(collect);
     }
     public static String 获取成分属性(String 人物,String 关系){
        List<String> collect = 可行性分析.chengfenList.stream().filter(m->m!=null && 人物.equals(m.renwu)
        && 关系.equals(m.guanxi)).map(m->m.shuxing).collect(Collectors.toList());
        return JSON.toJSONString(collect);
     }
    public static String 获取成分人物(String 属性,String 关系){
        List<String> collect = 可行性分析.chengfenList.stream().filter(m->m!=null && 属性.equals(m.shuxing)
                && 关系.equals(m.guanxi)).map(m->m.renwu).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }
    public static String 获取成分关系(String 人物,String 属性){
        List<String> collect = 可行性分析.chengfenList.stream().filter(m->m!=null && 人物.equals(m.renwu)
                && 属性.equals(m.shuxing)).map(m->m.guanxi).collect(Collectors.toList());
        return JSON.toJSONString(collect);
    }
    public static synchronized void 增加成分(成分 chengfen ){
        if(chengfen == null ) return;
        if(StringUtils.isNotEmpty(chengfen.getRenwu()) && chengfen.getRenwu().equals(常量.上一步结果)){
            可行性分析.上一步结果=chengfen.getShuxing();
            return;
        }
        if(StringUtils.isNotEmpty(chengfen.getRenwu()) && chengfen.getRenwu().equals(常量.集合数据)){
            可行性分析.集合数据=chengfen.getShuxing();
            return;
        }
        可行性分析.chengfenList.add(0,chengfen);
        Util.保存成分(chengfen);
    }
    public static void 保存成分(成分 chengfen){
        if(chengfen !=null){
            try{
                Util.writeFile(可行性分析.chengfenFilenames[可行性分析.chengfenFilenames.length-1],JSON.toJSONString(chengfen),true);
            }catch (IOException ioException){
                ioException.printStackTrace();
            }
        }
    }
    public static String 返回list集合(String str){
        return JSON.toJSONString(new ArrayList(){{
            add(str);
        }});
    }
    public static String 分割并返回list集合(String str,String split){
        return JSON.toJSONString(Stream.of(str.split(split)).collect(Collectors.toList()));
    }
    public static void 询问找参数(String sen,String methodName,int num){
        String format ="'%s'中动作 '%s'的参数%s是什么?";
        System.out.println(String.format(format,sen,methodName,num));
    }
    public static boolean 数组中的所有元素是否在字符串中(String[] paramArr,String sen){
        for(String arr1:paramArr){
            if(!sen.contains(arr1)){
                return false;
            }
        }
        return true;
    }

    public static void 删除集合中的子集合(CopyOnWriteArrayList<String> 方法集合,CopyOnWriteArrayList<String> 方法集合2){
        String a =String.join(" ",方法集合);
        String b =String.join(" ",方法集合2);
        List<String> collect = Arrays.asList(StringUtils.removeFirst(a,b).split("\\s+"));
        方法集合.clear();
        方法集合.addAll(new CopyOnWriteArrayList<>(collect));
    }
    public static boolean exist(String filename) throws IOException{
        File file =new File(filename);
        if(file.exists()){
            return true;
        }
        boolean newFile = file.createNewFile();
        return newFile;
    }
    public static void writeFile(String filename,String str,boolean append)throws IOException{
        if(!exist(filename)){
            return;
        }
        FileWriter fileWriter=new FileWriter(filename,append);
        fileWriter.write("\n");
        fileWriter.write(str);
        fileWriter.flush();
        fileWriter.close();
    }
    public static List<String> readFileByLine(String filename) throws IOException{
        if(!exist(filename)){
            return null;
        }
        File file=new File(filename);
        BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
        String str=null;
        List<String> list =new ArrayList<>();
        while ((str =bufferedReader.readLine())!=null){
            list.add(str);
        }
        bufferedReader.close();
        //反转倒序
        Collections.reverse(list);
        return list;
    }
    public static CopyOnWriteArrayList<String> 依次找方法(Set<String> methodnames,String sen){
        CopyOnWriteArrayList<String> 当前流程方法集合=new CopyOnWriteArrayList<>();
        for(int i=0;i<sen.length();i++){
            递归找方法(methodnames,当前流程方法集合,i,i+1,sen);
            int temp = 当前流程方法集合.size()==0?i:String.join("",当前流程方法集合).length()<i?i:
                    String.join("",当前流程方法集合).length();
            if(temp!=i){
                i=temp-1;
            }
        }
        return 当前流程方法集合;
    }
    public static int 递归找方法(Set<String> methodnames,List<String> list,int start,int end,String sen) {
        if (end > sen.length() && 集合任一元素是否包含(methodnames, sen.substring(start, end - 1))
                && methodnames.contains(sen.substring(start, end - 1))) {
            list.add(sen.substring(start, end - 1));
        }
        if (end > sen.length()) {
            return sen.length();
        }
        if (集合任一元素是否包含(methodnames, sen.substring(start, end))) {
            递归找方法(methodnames, list, start, end + 1, sen);
        } else {
            if (end - start == 1) {
                return start;
            } else {
                if (methodnames.contains(sen.substring(start, end - 1))) {
                    list.add(sen.substring(start, end - 1));
                }
                return end - 1;
            }
        }
        return start;
    }
    public static boolean 集合任一元素是否包含(Set<String> list,String str){
        boolean flag =false;
        for(String item:list){
            if(item.startsWith(str)){
                flag=true;
                break;
            }
        }
        return flag;
    }
    public static Set<String> 获取所有内部方法(){
        return 可行性分析.methodnames;
    }
}



两句子的唯一区别判断

package 工具;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import 入口.可行性分析;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class 两句子的唯一区别判断 {
    public static void main(String[] args) {
        可行性分析.init();
        List<String> wordList = 获取成分集合中所有单词();
        String sen1 = "被分割词是疑问句子";
        String sen2 = "被分割词是包含词是5";
        List<String> 句子中所有词组合 =句子中所有词组合(wordList,sen1);
        List<List<String>> 句子中所有词组合s =循环对句子中的词组合组装(句子中所有词组合);
        List<String> 句子中所有词组合2 = 句子中所有词组合(wordList,sen2);
        List<List<String>> 句子中所有词组合2s =循环对句子中的词组合组装(句子中所有词组合2);
        System.out.println(获取所有词组合等于1的句子词组集合(句子中所有词组合,句子中所有词组合2s));
//        System.out.println(判断两个集合元素不同的个数(句子中所有词组合,句子中所有词组合2));

    }
    public static List<String> 获取所有词组合等于1的句子词组集合(List<String> 句子中所有词组合,List<List<String>> 句子中所有词组合2s ){
        for(List<String> item2:句子中所有词组合2s){
            if(1 == 判断两个集合元素不同的个数(句子中所有词组合,item2)){
                return item2;
            }
        }
        return null;
    }
    public static List<String> 获取两个集合元素等于1的句子词组集合(List<List<String>> 句子中所有词组合s,List<List<String>> 句子中所有词组合2s){
        for(List<String> item:句子中所有词组合s){
            for(List<String> item2:句子中所有词组合2s){
                if(1==判断两个集合元素不同的个数(item,item2)){
                    return item2;
                }
            }
        }
        return null;
    }
    public static List<List<String>> 循环对句子中的词组合组装(List<String> 句子中所有词组合){
        List<List<String>> result = new ArrayList<>();
        result.add(句子中所有词组合);
        int num=2;
        while(num+1<句子中所有词组合.size()){
            对句子中的词组合组装(result,句子中所有词组合,num);
            num++;
        }
        return result;
    }
    public static void 对句子中的词组合组装(List<List<String>> result,List<String> 句子中所有词组合,int num){
        if(句子中所有词组合.size()<=num){
            return;
        }
        for(int i=0;i<句子中所有词组合.size();i++){
            List<String> list =new ArrayList<>();
            String 新词组 = "";
            for(int j=i;j<i+num;j++){
                新词组 += 句子中所有词组合.get(j);
            }
            list.addAll(句子中所有词组合.subList(0,i));
            list.add(新词组);
            list.addAll(句子中所有词组合.subList(i+num,句子中所有词组合.size()));
            result.add(list);
            if(i+num >=  句子中所有词组合.size()){
                break;
            }
        }
    }
    public static String 获取唯一区别教学语句(List<String> 待验证教学集合,String sen){
        List<String> wordlist = 获取成分集合中所有单词();
        List<String> 句子中所有组合2=句子中所有词组合(wordlist,sen);
        List<List<String>> 句子中所有词组合2s = 循环对句子中的词组合组装(句子中所有组合2);
        if(CollectionUtils.isEmpty(待验证教学集合))return null;
        String result = 待验证教学集合.stream().filter(m->{
            List<String> 句子中所有词组合 = 句子中所有词组合(wordlist,m);
            List<String> 匹配的句子 =获取所有词组合等于1的句子词组集合(句子中所有词组合,句子中所有词组合2s);
            if(CollectionUtils.isNotEmpty(匹配的句子)){
                return true;
            }
            return false;
        }).findFirst().orElse(null);
        return result;
    }
    public static List<String> 获取成分集合中所有单词(){
        List<String> wordlist=new ArrayList<>();
        wordlist.addAll(可行性分析.chengfenList.stream().map(m->m.renwu).distinct().collect(Collectors.toList()));
        wordlist.addAll(可行性分析.chengfenList.stream().map(m->m.shuxing).distinct().collect(Collectors.toList()));
        wordlist.addAll(可行性分析.chengfenList.stream().map(m->m.guanxi).distinct().collect(Collectors.toList()));
        wordlist=wordlist.stream().distinct().collect(Collectors.toList());
        return wordlist;
    }
    public static List<String> 句子中所有词组合(List<String> wordlist,String sen){
        List<String> collect =wordlist.stream().filter(m->m!=null && sen !=null && sen.contains(m) && m.length()>1
        && !m.equals(sen)).collect(Collectors.toList());
        //加入内部变量名
        collect.addAll(替换逻辑集合中的变量.获取所有常量名());
        collect= collect.stream().distinct().collect(Collectors.toList());
        //排除掉集合中项目包含词
        List<String> result =new ArrayList<>();
        句子中所有词组合sub(collect,sen,result);
        return result;
    }
    //保留长度最小的
    public static void 排除掉集合中互相包含词(List<String> collect){
        List<String> result = new ArrayList<>();
        result.addAll(collect);
        result.stream().forEach(m->{
            for(int i=0;i<collect.size();i++){
                if(collect.get(i).length()>m.length() && collect.get(i).contains(m)){
                    collect.remove(i);
                }
            }
        });
    }
    public static void 句子中所有词组合sub(List<String> worList,String sen,List<String> result){
        List<String> collect1=worList.stream().filter(m-> m!= null && sen.startsWith(m)).collect(Collectors.toList());
        if(StringUtils.isEmpty(sen)){
            return;
        }
        String 词语块=sen.substring(0,1);
        if(CollectionUtils.isNotEmpty(collect1)){
            词语块=collect1.stream().sorted((a,b)->{
                if(a.length()<b.length()){
                    return 1;
                }
                return -1;
            }).findFirst().get();
        }
        if(!判断上一个词是否是已知词(worList,result)){
            result.add(result.get(result.size()-1)+词语块);
            result.remove(result.size()-2);
        }else {
            result.add(词语块);
        }
        if(sen.length()==1){
            return;
        }
        String newsen =sen.substring(词语块.length());
        句子中所有词组合sub(worList,newsen,result);
    }
    public static boolean 判断上一个词是否是已知词(List<String> wordList,List<String> result){
        if(CollectionUtils.isEmpty(result)){
            return true;
        }
        return wordList.contains(result.get(result.size()-1));
    }
    public static int 判断两个集合元素不同的个数(List<String> list1,List<String> list2){
        if(list1.size()<=1 || list2.size()<=1){
            return 0;
        }
        if(list1.size()!=list2.size()){
            String temp1=String.join("",list1);
            String temp2=String.join("",list2);
            if(temp1.contains(temp2)|| temp2.contains(temp1)){
                return 1;
            }
            return 0;
        }
        int num=0;
        for(int i=0;i<list1.size();i++){
            if(!StringUtils.equals(list1.get(i),list2.get(i))){
                num++;
            }
        }
        return num;
    }
}

分组

package 工具;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class 分组 {
    public static void main(String[] args) {
        List<String> list =new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("dd");
        list.add("aa");
        list.add("cc");
        list.add("bb");
        list.add("aa");
        String result = JSON.toJSONString(对集合数据分组(list));
        Map<String,Integer> map = JSON.parseObject(result,Map.class);
        System.out.println(过滤大于指标的分组集合(map,2));
    }
    public static List<String> 过滤大于指标的分组集合(Map<String,Integer> map,int index){
        List<String> collect = map.entrySet().stream().filter(m->m.getValue() >=
                index).map(m->m.getKey()).collect(Collectors.toList());
        return collect;
    }
    public static Map<String,Integer> 对集合数据分组(List<String> list){
        Map<String,Integer> result = new HashMap<>();
        while(list.size()>0){
            int num=0;
            String temp = list.get(0);
            while(list.indexOf(temp)>=0){
                int k = list.indexOf(temp);
                if(k>=0){
                    num++;
                    list.remove(k);
                }
            }
            result.put(temp,num);
        }
        return result;
    }
}

历史逻辑处理

package 工具;

import 实体.成分;

import java.util.ArrayList;
import java.util.List;

public class 历史逻辑处理 {
    public static List<成分>  存放临时逻辑状态 = new ArrayList<>();
//    public static void 还原逻辑前的键值状态        ;
}

常量

package 工具;

public class 常量 {
    public static final String= "空";
    public static final String 是什么 = "是什么";
    public static final String 空值 = "";
    public static final String 待解释词是空 = "待解释词是空";
    public static final String 上一句话 = "上一句话";
    public static final String 输入 = "输入";
    public static final String 输出 = "输出";
    public static final String 输入是 = "输入是";
    public static final String 待解释词 = "待解释词";
    public static final String 当前对话人 = "当前对话人";
    public static final String 当前人 = "当前人";
    public static final String 人物 = "人物";
    public static final String 属性 = "属性";
    public static final String 关系 = "关系";
    public static final String 当前句子 = "当前句子";
    public static final String 当前逻辑句子 = "当前逻辑句子";
    public static final String 当前句子方法集合 = "当前句子方法集合";
    public static final String 当前输入句子 = "当前输入句子";
    public static final String 序号词 = "序号词";
    public static final String 意向词 = "意向词";
    public static final String 意向词的值 = "意向词的值";
    public static final String 上一步结果 = "上一步结果";
    public static final String 上一次判断结果 = "上一次判断结果";
    public static final String 上一次判断结果是 = "上一次判断结果是";
    public static final String= "是";
    public static final String 下标 = "下标";
    public static final String 判断条件1 = "判断条件1";
    public static final String 判断条件2 = "判断条件2";
    public static final String TRUE = "true";
    public static final String 集合数据 = "集合数据";
    public static final String 分组数据 = "分组数据";
    public static final String 被加数 = "被加数";
    public static final String 加数 = "加数";
    public static final String 减数 = "减数";
    public static final String 被减数 = "被减数";
    public static final String 被乘数 = "被乘数";
    public static final String 乘数 = "乘数 =";
    public static final String 被除数 = "被除数";
    public static final String 除数 = "除数";
    public static final String 被包含词 = "被包含词";
    public static final String 包含词 = "包含词";
    public static final String 方法变量集合 = "方法变量集合";
    public static final String 预处理逻辑 = "预处理逻辑";
    public static final String 判断逻辑 = "判断逻辑";
    public static final String 逻辑集合 = "逻辑集合";
    public static final String 分割词 = "分割词";
    public static final String 被分割词 = "被分割词";
    public static final String 分割个数 = "分割个数";
    public static final String 获取预处理逻辑 = "获取预处理逻辑";
    public static final String 执行预处理逻辑 = "执行预处理逻辑";
    public static final String 循环体 = "循环体";
    public static final String 循环数据 = "循环数据";
    public static final String 当前循环数据 = "当前循环数据";
    public static final String 尝试用历史思维处理 = "尝试用历史思维处理";
    public static final String 查询待解释词 = "查询待解释词";
    public static final String 过滤条件 = "过滤条件";
    public static final String 循环参数键1 = "循环参数键1";
    public static final String 循环参数键2 = "循环参数键2";
    public static final String 预处理结果 = "预处理结果";
    public static final String 要查询的字段 = "要查询的字段";
    public static final String 指标 = "指标";
    public static final String 组装词1 = "组装词1";
    public static final String 组装句子 = "组装句子";
    public static final String 组装词2 = "组装词2";
    public static final String 待处理句子 = "待处理句子";
    public static final String 待处理词 = "待处理词";
    public static final String 疑问词 = "疑问词";
    public static final String 疑问句子 = "疑问句子";
    public static final String 被删除句子 = "被删除句子";
    public static final String 删除词 = "删除词";
    public static final String 当前句子返回结果 = "当前句子返回结果";
    public static final String 内部方法的错误信息 = "内部方法的错误信息";
    public static final String 前面 = "前面";

}

替换句子汇总的相似成分

package 工具;

import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import 入口.可行性分析;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class 替换句子汇总的相似成分 {
    private static List<String> wordlist = null;

    public static void main(String[] args) {
        可行性分析.init();
        wordlist = 两句子的唯一区别判断.获取成分集合中所有单词();
        String sen1 = "判断四4是否包含43";
        Map<String,List<String>> 句子中所有词组合 = 查询句子词组的相似词(sen1,"相似");
        List<String> result =替换相似词形成新句子(sen1,sen1);
        System.out.println(result);
    }
    public static List<String> 替换相似词形成新句子(String sen,String 相似){
        wordlist = 两句子的唯一区别判断.获取成分集合中所有单词();
        Map<String,List<String>> 词组与其相似集合 = 查询句子词组的相似词(sen,相似);
        List<String> result = new ArrayList<>();
        词组与其相似集合.forEach((k,v) ->{
            String senTemp =sen ;
            for(String m:v){
                senTemp =sen.replace(k,m);
            }
            result.add(senTemp);
        });
        return result;
    }
    public static Map<String, List<String>> 查询句子词组的相似词(String sen,String 相似){
        List<String> 句子中所有词组组合 = 两句子的唯一区别判断.句子中所有词组合(wordlist,sen);
        Map<String,List<String>> map =new HashMap<>();
        for(String sen1:句子中所有词组组合){
            List<String> strings = JSON.parseArray(Util.获取成分属性(sen1,相似),String.class);
            List<String> strings2 = JSON.parseArray(Util.获取成分人物(sen1,相似),String.class);
            if(CollectionUtils.isNotEmpty(strings)){
                strings.addAll(strings2);
                map.put(sen1,strings);
            }else if(CollectionUtils.isNotEmpty(strings2)){
                strings2.addAll(strings);
                map.put(sen1,strings2);
            }else {
                continue;
            }
        }
        return map;
    }
}

替换逻辑集合中的变量

package 工具;

import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import 入口.可行性分析;
import 实体.成分;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class 替换逻辑集合中的变量 {
    public static void main(String[] args) {
        可行性分析.init();
        List<String> wordlist = 两句子的唯一区别判断.获取成分集合中所有单词();
        String 原句 = "输出包含";
        String 当前句 = "输出不包含";
        List<String> 原句中所有词组合 = 两句子的唯一区别判断.句子中所有词组合(wordlist,原句);
        List<String> 当前句中所有词组合 = 两句子的唯一区别判断.句子中所有词组合(wordlist,当前句);
        List<List<String>> 句子中所有词组合2s= 两句子的唯一区别判断.循环对句子中的词组合组装(当前句中所有词组合);
        当前句中所有词组合 = 两句子的唯一区别判断.获取所有词组合等于1的句子词组集合(原句中所有词组合,句子中所有词组合2s);
        List<String> 逻辑集合 = JSON.parseArray(Util.获取最新的一组逻辑集合(原句),String.class);
        List<String> 所有常量名 = 获取所有常量名();
        List<String> 找出逻辑语句中的变量并替换 = 找出逻辑语句中的变量并替换(原句,当前句,逻辑集合,所有常量名,原句中所有词组合,当前句中所有词组合);
        System.out.println(找出逻辑语句中的变量并替换);
    }
    public static List<String> 获取新的逻辑集合(String 原句,String 当前句){
        if(StringUtils.isEmpty(原句) || StringUtils.isEmpty(当前句)){
            return null;
        }
        List<String> wordlist = 两句子的唯一区别判断.获取成分集合中所有单词();
        List<String> 原句中所有词组合 = 两句子的唯一区别判断.句子中所有词组合(wordlist,原句);
        List<String> 当前句中所有词组合  = 两句子的唯一区别判断.句子中所有词组合(wordlist,当前句);
        List<List<String>> 句子中所有词组合2s= 两句子的唯一区别判断.循环对句子中的词组合组装(当前句中所有词组合);
        当前句中所有词组合 = 两句子的唯一区别判断.获取所有词组合等于1的句子词组集合(原句中所有词组合,句子中所有词组合2s);
        List<String> 逻辑集合 = JSON.parseArray(Util.获取最新的一组逻辑集合(原句),String.class);
        List<String> 所有常量名 = 获取所有常量名();
        List<String> 找出逻辑语句中的变量并替换 = 找出逻辑语句中的变量并替换(原句,当前句,逻辑集合,所有常量名,原句中所有词组合,当前句中所有词组合);
        return 找出逻辑语句中的变量并替换;
    }
    public static void 保存生成的逻辑集合(String explained, List<String> list){
        if(CollectionUtils.isEmpty(list)){
            return;
        }
        Util.增加成分(new 成分().setRenwu("------------------------------------start-----------------------------------------------------")
        .setShuxing("唯一区别生成的逻辑集合"));
        for(String m:list){
            Util.增加成分(new 成分().setRenwu(常量.当前句子).setGuanxi(常量.).setShuxing(m).setExplained(explained));
        }
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setGuanxi(常量.).setShuxing(explained));
        Util.增加成分(new 成分().setRenwu("------------------------------------end-----------------------------------------------------")
                .setShuxing("唯一区别生成的逻辑集合"));
    }
    public static List<String> 获取所有常量名(){
        Field[] fields = new 常量().getClass().getFields();
        List<String> list =new ArrayList<>();
        for(Field field:fields){
            list.add(field.getName());
        }
        return list;
    }
    public static List<String> 找出逻辑语句中的变量并替换(String 原句,String 当前句,List<String> 逻辑集合,List<String> 所有常量名,List<String> 原句词语块,List<String> 当前句词语块){
        List<String> list = new ArrayList<>();
        if(CollectionUtils.isEmpty(逻辑集合)){
            return null;
        }
        if(原句词语块.size() != 当前句词语块.size()){
            return null;
        }
        for(String luoji:逻辑集合){
            String newluoji =luoji;
            for(String name:所有常量名){
                String key = name + 常量.;
                if(!luoji.startsWith(key)){
                    continue;
                }
                String value = luoji.substring(key.length());
                if(原句.equals(value)){
                    newluoji = key+当前句;
                    break;
                }
                if(!原句词语块.contains(value)){
                    continue;
                }
                int 要替换词在原句子中的位置 = 原句词语块.indexOf(value);
                String value替换为当前句子中的词 =当前句词语块.get(要替换词在原句子中的位置);
                newluoji=key+value替换为当前句子中的词;
                break;
            }
            list.add(newluoji);
        }
        return list;
    }
    public static List<String> 找出逻辑语句中的变量并替换(List<String> 逻辑集合,List<String> 所有常量名,String 原句,String 当前句){
        List<String> list = new ArrayList<>();
        for(String luoji:逻辑集合){
            String newluoji = luoji;
            for(String name:所有常量名){
                String key = name + 常量.;
                if(!luoji.startsWith(key)){
                    continue;
                }
                String value = luoji.substring(key.length());
                if(!原句.contains(value)){
                    continue;
                }
                int 要替换词在原句子中的位置 = 原句.indexOf(value);
                String value替换为当前句子中的词 =  当前句.substring(要替换词在原句子中的位置,要替换词在原句子中的位置+value.length());
                newluoji =key+value替换为当前句子中的词;
            }
            list.add(newluoji);
        }
        return list;
    }
}

父子节点排序

package 工具;

import com.alibaba.fastjson.JSON;
import 入口.可行性分析;

import java.util.ArrayList;
import java.util.List;

public class 父子节点排序 {

    public static void main(String[] args) {
        可行性分析.init();
        List<String> list = new ArrayList<>();
        list.add("获取唯一区别教学语句");
        list.add("对句子做相似处理");
        list.add("获取有逻辑的待解释词");

        父子节点排序(list,"前面");
        System.out.println(list);
    }

    //
    public static void 父子节点排序(List<String> list,String 比较词){
        for(int i=0;i<list.size();i++){
            String renwu= list.get(i);
            List<String> shuxings = JSON.parseArray(Util.获取成分属性(renwu,比较词),String.class);
            for(String shuxing:shuxings){
                int index = list.indexOf(shuxing);
                if(index>=0){
                    if(index <i){
                        list.remove(i);
                        list.add(index,renwu);
                    }
                }
            }
        }
    }
}

获取句子中的未知词

package 工具;

import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import 入口.可行性分析;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class 获取句子中的未知词 {
    public static void main(String[] args) {
        可行性分析.init();
        List<String> 集合数据= JSON.parseArray(Util.获取最新成分属性(常量.集合数据),String.class);
        集合数据.add("sd");
        List<String> wordlist= 两句子的唯一区别判断.获取成分集合中所有单词();
        String sen = "当前输入句子的待处理句子";
        String sen2="222";
        System.out.println(获取句子中的未知词(sen));
    }

    public static List<String> 获取句子中的未知词(String sen){
        String 关系 = 常量.;
        String aa=Util.根据关系查询人物(关系);
        List<String> list=JSON.parseArray(aa,String.class);
        list.addAll(可行性分析.methodnames);
        List<String> result = 获取句子中的未知词(sen,list);
        return result;
    }

    public static List<String> 获取句子中的未知词(String sen,List<String> 已知词){
        已知词=已知词.stream().distinct().collect(Collectors.toList());
        List<String> words = new ArrayList<>();
        int sen中的词一次也没出现在已知词 = 0;
        for(String str:已知词){
            if(!sen.contains(str)){
                sen中的词一次也没出现在已知词++;
                continue;
            }
            words.addAll(Stream.of(sen.split(str)).collect(Collectors.toList()));
            words=words.stream().distinct().collect(Collectors.toList());
        }
        if(sen中的词一次也没出现在已知词 == 已知词.size())words.add(sen);
        words=从一个集合中排除在另一个集合中的数据(words,已知词);
        return words;
    }

    public static List<String> 从一个集合中排除在另一个集合中的数据(List<String> 被排除集合,List<String> 排除集合){
        if(CollectionUtils.isEmpty(被排除集合) || CollectionUtils.isEmpty(排除集合)){
            return 被排除集合;
        }
        for(int i=0;i<被排除集合.size();i++){
            if(排除集合.contains(被排除集合.get(i))){
                被排除集合.remove(i);
                i--;
            }
        }
        return 被排除集合;
    }
}

预处理逻辑之间相互处理功能

package 工具;

public class 预处理逻辑之间相互处理功能 {
}

不执行后方法异常

package 异常;

public class 不执行后方法异常 extends Exception {
    public 不执行后方法异常(){
        super();
    }
    public 不执行后方法异常(String message){
        super(message);
    }
}

处理方法

package 执行;

import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import 实体.成分;
import 工具.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class 处理方法 {

    public void(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String[] arrs=Util.获取最新成分属性(常量.当前句子).split(Thread.currentThread().getStackTrace()[1].getMethodName(),2);
        if(arrs.length<2)return;
        Util.增加成分(new 成分().setRenwu(arrs[0]).setShuxing(arrs[1]).setGuanxi(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }

    public void 相似(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String[] arrs=Util.获取最新成分属性(常量.当前句子).split(Thread.currentThread().getStackTrace()[1].getMethodName(),2);
        if(arrs.length<2)return;
        Util.增加成分(new 成分().setRenwu(arrs[0]).setShuxing(arrs[1]).setGuanxi(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }
    public void 小于(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String[] arrs=Util.获取最新成分属性(常量.当前句子).split(Thread.currentThread().getStackTrace()[1].getMethodName(),2);
        if(arrs.length<2)return;
        Util.增加成分(new 成分().setRenwu(arrs[0]).setShuxing(arrs[1]).setGuanxi(Thread.currentThread().getStackTrace()[1].getMethodName()));
    }

    public void 还原上一次判断结果为正确(){
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing("true").setGuanxi(常量.));
    }

    public void 获取集合中的下标(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        int 下标=Integer.parseInt(Util.获取最新成分属性(常量.下标));
        List<String> list = JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        if(CollectionUtils.isNotEmpty(list)){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(list.get(下标)).setGuanxi(常量.));
        }
    }

    public void 输出上一步结果(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        System.out.println(常量.上一步结果+"是: "+Util.获取最新成分属性(常量.上一步结果));
    }

    public void 执行输出方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String[] arrs=Util.获取最新成分属性(常量.上一步结果).split(常量.输出,2);
        if(arrs.length<2) return;
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(arrs[1]).setGuanxi(常量.));
        输出上一步结果();
    }

    public void 获取意向词属性(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String str  =Util.获取最新成分属性(常量.意向词);
        String shuxing=Util.获取最新成分属性(str);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(shuxing).setGuanxi(常量.));
    }

    public void 获取意向词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String str =Util.获取最新成分属性(常量.意向词);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(str).setGuanxi(常量.));
    }


    public void 保存意向词的值(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(Util.获取最新成分属性(常量.意向词)).setShuxing(Util.获取最新成分属性(常量.上一步结果)).setGuanxi(常量.));
    }

    public void 保存意向词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.意向词).setShuxing(Util.获取最新成分属性(常量.意向词的值)).setGuanxi(常量.));

    }

    public void 获取当前解释句子(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.获取最新成分属性(常量.意向词的值)).setGuanxi(常量.));
    }
    public void 如果等于(){
        String 判断条件1=Util.获取最新成分属性(常量.判断条件1);
        String 判断条件2=Util.获取最新成分属性(常量.判断条件2);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(判断条件1.equals(判断条件2)+"").setGuanxi(常量.));
    }

    public void 如果错误(){
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing("false".equals(上一步结果)+"").setGuanxi(常量.));
    }
    public void 执行分割方法(){
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        String 分割词=Util.获取最新成分属性(常量.分割词);
        String 被分割词=Util.获取最新成分属性(常量.被分割词);
        String 个数=Util.获取最新成分属性(常量.分割个数);
        List<String> result =null;
        if(StringUtils.isEmpty(个数)){
            result= Stream.of(被分割词.split(分割词)).collect(Collectors.toList());
        }else{
            int 分割个数=Integer.parseInt(个数);
            result=Stream.of(被分割词.split(分割词,分割个数)).collect(Collectors.toList());
        }
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(result)).setGuanxi(常量.));
    }

    public void 删除句子中的词()throws Exception{
        String 被删除句子=Util.获取最新成分属性(常量.被删除句子);
        String 删除词=Util.获取最新成分属性(常量.删除词);
        if(被删除句子==null){
            throw new Exception ("被删除句子是什么");
        }
        if(删除词==null){
            throw new Exception("删除词是什么");
        }
        String result = 被删除句子.replace(删除词, 常量.空值);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(result).setGuanxi(常量.));
    }

    public void 如果不等于空(){
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing(StringUtils.isNoneBlank(上一步结果)+"").setGuanxi(常量.));
    }
    public void 如果正确(){
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing("true".equals(上一步结果)+"").setGuanxi(常量.));
    }

    public void 获取判断条件1(){
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        Util.增加成分(new 成分().setRenwu(常量.判断条件1).setShuxing(上一步结果).setGuanxi(常量.));
    }

    public void 否则(){
        boolean str=Boolean.parseBoolean(Util.获取最新成分属性(常量.上一次判断结果));
        str=!str;
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing(str+"").setGuanxi(常量.));
    }

    public void 上一次判断结果是true(){
        Util.增加成分(new 成分().setRenwu(常量.上一次判断结果).setShuxing("true").setGuanxi(常量.));
    }

    public void 保存成分(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 人物=Util.获取最新成分属性(常量.人物);
        String 属性=Util.获取最新成分属性(常量.属性);
        String 关系=Util.获取最新成分属性(常量.关系);
        Util.增加成分(new 成分().setRenwu(人物).setShuxing(属性).setGuanxi(关系));

    }

    public void 保存人物(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.人物).setShuxing(Util.获取最新成分属性(常量.上一步结果)).setGuanxi(常量.));

    }

    public void 保存关系(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.关系).setShuxing(Util.获取最新成分属性(常量.上一步结果)).setGuanxi(常量.));
    }
    public void 保存属性(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.属性).setShuxing(Util.获取最新成分属性(常量.上一步结果)).setGuanxi(常量.));
    }

    public void 执行思维集合() throws Exception {
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 思维集合=Util.获取最新成分属性(常量.上一步结果);
        Util.执行思维集合(思维集合,true);
    }

    public void 查询下标人物(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;

        String 下标=Util.获取最新成分属性(常量.下标);
        int index=Integer.parseInt(下标);
        成分 获取指定下标=Util.获取指定下标(index);
        if(获取指定下标!=null){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(获取指定下标.getRenwu()).setGuanxi(常量.));
        }else{
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(null).setGuanxi(常量.));
        }
    }


    public void 查询下标属性(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 下标=Util.获取最新成分属性(常量.下标);
        int index=Integer.parseInt(下标);
        成分 获取指定下标=Util.获取指定下标(index);
        if(获取指定下标!=null){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(获取指定下标.getShuxing()).setGuanxi(常量.));
        }else{
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(null).setGuanxi(常量.));
        }
    }


    public void 查询下标关系(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 下标=Util.获取最新成分属性(常量.下标);
        int index=Integer.parseInt(下标);
        成分 获取指定下标=Util.获取指定下标(index);
        if(获取指定下标!=null){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(获取指定下标.getGuanxi()).setGuanxi(常量.));
        }else{
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(null).setGuanxi(常量.));
        }
    }

    public void 根据关系查询人物(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;

        String 关系=Util.获取最新成分属性(常量.关系);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.根据关系查询人物(关系)).setGuanxi(常量.));
    }

    public void 去重上一步结果(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;

        List<String> list=JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(list)).setGuanxi(常量.));
    }



    public void 查询成分属性(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 人物=Util.获取最新成分属性(常量.属性);
        String 关系=Util.获取最新成分属性(常量.关系);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.获取成分属性(人物,关系)).setGuanxi(常量.));
    }

    public void 查询成分人物(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 属性=Util.获取最新成分属性(常量.属性);
        String 关系=Util.获取最新成分属性(常量.关系);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.获取成分人物(属性,关系)).setGuanxi(常量.));
    }

    public void 查询成分关系(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 人物=Util.获取最新成分属性(常量.人物);
        String 属性=Util.获取最新成分属性(常量.属性);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.获取成分关系(人物,属性)).setGuanxi(常量.));
    }

    public void 查询待解释词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 待解释词=Util.获取最新成分属性(常量.待解释词);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(待解释词).setGuanxi(常量.));
    }

    public void 查询字段所有值(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 要查询的字段=Util.获取最新成分属性(常量.要查询的字段);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.动态查询字段所有值(要查询的字段)).setGuanxi(常量.));
    }

    public void 替换句子中的相似词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);

        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.替换句子中的相似词(上一步结果)).setGuanxi(常量.));
    }

    public void 对集合数据分组(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 集合数据=Util.获取最新成分属性(常量.集合数据);
        List<String> list=JSON.parseArray(集合数据,String.class);
        Util.增加成分(new 成分().setRenwu(常量.分组数据).setShuxing(JSON.toJSONString(分组.对集合数据分组(list))).setGuanxi(常量.));
    }
    public void 过滤大于指标的集合数据(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 分组数据=Util.获取最新成分属性(常量.分组数据);
        int 指标=Integer.parseInt(Util.获取最新成分属性(常量.指标));
        Map<String,Integer> map=JSON.parseObject(分组数据,Map.class);
        Util.增加成分(new 成分().setRenwu(常量.集合数据).setShuxing(JSON.toJSONString(分组.过滤大于指标的分组集合(map,指标))).setGuanxi(常量.));
    }

    public void 获取所有有逻辑的被解释词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> 所有有逻辑的被解释词=Util.获取所有有逻辑的被解释词();

        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(所有有逻辑的被解释词)).setGuanxi(常量.));
    }

    public void 查询唯一区别教学语句(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        List<String> list=JSON.parseArray(上一步结果,String.class);
        String 当前输入句子=Util.获取最新成分属性(常量.当前输入句子);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(两句子的唯一区别判断.获取唯一区别教学语句(list,当前输入句子)).setGuanxi(常量.));
    }

    public void 获取当前输入句子(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(Util.获取最新成分属性(常量.当前输入句子)).setGuanxi(常量.));
    }

    public void 替换逻辑集合中的变量(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 原句=Util.获取最新成分属性(常量.上一步结果);
        String 当前句=Util.获取最新成分属性(常量.当前输入句子);
        if(StringUtils.isNotEmpty(原句)&&StringUtils.isNotEmpty(当前句)){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(替换逻辑集合中的变量.获取新的逻辑集合(原句,当前句))).setGuanxi(常量.));
        }
    }

    public void 保存自动生成的逻辑集合(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 当前句=Util.获取最新成分属性(常量.当前输入句子);
        List<String> 新逻辑集合=JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        替换逻辑集合中的变量.保存生成的逻辑集合(当前句,新逻辑集合);
    }

    public void 获取成分集合中所有单词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> wordlist=两句子的唯一区别判断.获取成分集合中所有单词();
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(wordlist)).setGuanxi(常量.));
    }

    public void 获取集合中指定元素(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        int 指标=Integer.parseInt(Util.获取最新成分属性(常量.指标));
        List<String> 集合数据=JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        if(CollectionUtils.isNotEmpty(集合数据)){
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(集合数据.get(指标-1)).setGuanxi(常量.));
        }
    }
    public void 获取有逻辑的待解释词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String result=Util.获取有逻辑的待解释词(Util.获取最新成分属性(常量.上一步结果));
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(result).setGuanxi(常量.));
    }

    public void 获取句子中的未知词(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 待处理句子=Util.获取最新成分属性(常量.待处理句子);
        List<String> 已知词=JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        List<String> result=获取句子中的未知词.获取句子中的未知词(待处理句子,已知词);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(result)).setGuanxi(常量.));
    }


    public void 组装句子(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 组装词1=Util.获取最新成分属性(常量.组装词1);
        String  组装词2=Util.获取最新成分属性(常量.组装词2);

        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(组装词1.concat(组装词2)).setGuanxi(常量.));
    }

    public void 获取内部所有方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 所有内部方法名=JSON.toJSONString(Util.获取所有内部方法());
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(所有内部方法名).setGuanxi(常量.));
    }

    public void 将数据加入到集合中(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> 已知词=new ArrayList();

        String 上一步结果=Util.获取最新成分属性(常量.上一步结果);
        List<String> 集合数据=JSON.parseArray(Util.获取最新成分属性(常量.集合数据),String.class);
        if(集合数据==null)集合数据=new ArrayList();
        try{
            集合数据.addAll(JSON.parseArray(上一步结果,String.class));
        }catch(Exception e){
            集合数据.add(上一步结果);
        }
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(集合数据)).setGuanxi(常量.));
        Util.增加成分(new 成分().setRenwu(常量.集合数据).setShuxing(JSON.toJSONString(集合数据)).setGuanxi(常量.));
    }

    public void 去重集合(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> 集合数据=JSON.parseArray(Util.获取最新成分属性(常量.上一步结果),String.class);
        if(集合数据==null)集合数据=new ArrayList<>();
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(集合数据.stream().distinct().collect(Collectors.toList()))).setGuanxi(常量.));

    }

    public void 过滤集合() {
        if ("false".equals(Util.获取最新成分属性(常量.上一次判断结果))) return;
        List<String> 已知词 = new ArrayList<>();
        String 集合数据 = Util.获取最新成分属性(常量.集合数据);
        String 过滤条件 = Util.获取最新成分属性(常量.上一步结果);
        List<String> list = JSON.parseArray(Util.获取最新成分属性(常量.集合数据), String.class);
        List<String> newlist = list.stream().filter(m -> m != null && m.equals(过滤条件)).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(newlist)) {
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(null).setGuanxi(常量.));
        } else {
            Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(newlist)).setGuanxi(常量.));
        }
    }


    public void 根据元素分类过滤集合(){
        String 集合数据=Util.获取最新成分属性(常量.上一步结果);
        String 属性=Util.获取最新成分属性(常量.过滤条件);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(Util.根据元素分类过滤集合(JSON.parseArray(集合数据,String.class),属性))));
    }

    public void 递归获取关系属性(){
        String 属性=Util.获取最新成分属性(常量.属性);
        String 关系=Util.获取最新成分属性(常量.关系);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(Util.递归获取关系属性(属性,关系))));
    }

    public void 执行循环方法() throws Exception {
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> list=JSON.parseArray(Util.获取最新成分属性(常量.循环数据),String.class);
        String 循环体=Util.获取最新成分属性(常量.循环体);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(list.get(0)));
        for(int i=0;i<list.size();i++){
            循环体参数设置(Util.获取最新成分属性(常量.上一步结果),list.get(i));
            Util.增加成分(new 成分().setRenwu(常量.当前循环数据).setShuxing(list.get(i)));
            Util.反射执行指定方法(循环体);
        }
    }


    public void 执行无循环体方法() throws Exception {
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        List<String> list=JSON.parseArray(Util.获取最新成分属性(常量.循环数据),String.class);
        if(CollectionUtils.isEmpty(list)){
            return;
        }
        for(int i=0;i<list.size();i++){
            Util.增加成分(new 成分().setRenwu(常量.当前循环数据).setShuxing(list.get(i)));
            执行学习语句();
        }
    }

    public void 替换相似词形成新句子(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 待处理句子=Util.获取最新成分属性(常量.上一步结果);
        String 待处理词=Util.获取最新成分属性(常量.待处理词);
        List<String> 替换相似词形成新句子=替换句子汇总的相似成分.替换相似词形成新句子(待处理句子,待处理词);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(JSON.toJSONString(替换相似词形成新句子)));

    }


    public void 循环体参数设置(String 循环参数键1,  String 循环参数键2){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;

        String 循环参数键值1=Util.获取最新成分属性(常量.循环参数键1);
        String 循环参数键值2=Util.获取最新成分属性(常量.循环参数键2);
        Util.增加成分(new 成分().setRenwu(循环参数键值1).setShuxing(循环参数键1));
        Util.增加成分(new 成分().setRenwu(循环参数键值2).setShuxing(循环参数键2));
    }


    public void 执行学习语句() throws Exception {
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;

        String 当前循环数据=Util.获取最新成分属性(常量.当前循环数据);
        String 预处理逻辑=Util.获取待解释词(常量.当前循环数据);
        Util.执行思维集合(预处理逻辑,true);

    }
    public void 执行相加方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.获取当前方法中的变量(常量.被加数, 常量.加数);
        int 被加数=Integer.parseInt(Util.获取最新成分属性(常量.被加数));
        int 加数=Integer.parseInt(Util.获取待解释词(常量.加数));
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(被加数+加数+""));

    }

    public void 执行相减方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        int 被减数=Integer.parseInt(Util.获取最新成分属性(常量.被减数));
        int 减数=Integer.parseInt(Util.获取待解释词(常量.减数));
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing((被减数-减数)+""));

    }

    public void 执行相乘方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        Util.获取当前方法中的变量(常量.被乘数, 常量.乘数);
        int 被乘数=Integer.parseInt(Util.获取最新成分属性(常量.被乘数));
        int 乘数=Integer.parseInt(Util.获取待解释词(常量.乘数));
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing((被乘数*乘数)+""));

    }

    public void 执行相除方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        int 被除数=Integer.parseInt(Util.获取最新成分属性(常量.被除数));
        int 除数=Integer.parseInt(Util.获取待解释词(常量.除数));
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing((被除数/除数)+""));

    }

    public void 执行包含方法(){
        if("false".equals(Util.获取最新成分属性(常量.上一次判断结果)))return;
        String 被包含词=Util.获取最新成分属性(常量.被包含词);
        String 包含词=Util.获取最新成分属性(常量.包含词);
        Util.增加成分(new 成分().setRenwu(常量.上一步结果).setShuxing(被包含词.contains(包含词)+""));

    }
}

chengfen17.txt

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"你可以这样理解","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是疑问句子","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取意向词属性","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是被删除句子","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"保存意向词的值","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"删除词是是什么","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"删除句子中的词","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是待解释词","sxindex":1}
{"explained":"你可以这样理解"  ,"guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"保存意向词的值","sxindex":1}
{"explained":"你可以这样理解","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"你待解释词是获取有逻辑的待解释词","sxindex":1}
{"explained":"获取有逻辑的待解释词","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取当前输入句子","sxindex":1}
{"explained":"获取有逻辑的待解释词","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取有逻辑的待解释词","sxindex":1}
{"explained":"获取有逻辑的待解释词","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}
{"explained":"获取有逻辑的待解释词","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取当前输入句子","sxindex":1}
{"guanxi":"是","renwu":"获取有逻辑的待解释词","rwindex":1,"shuxing":"预处理逻辑","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"待解释词是对句子做相似处理","sxindex":1}
{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取当前句子","sxindex":1}
{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待处理词是相似","sxindex":1}
{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"替换相似词形成新句子","sxindex":1}

{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是循环数据","sxindex":1}
{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"保存意向词的值","sxindex":1}
{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"执行无循环体方法","sxindex":1}

{"explained":"对句子做相似处理","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"对句子做相似处理","rwindex":1,"shuxing":"预处理逻辑","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"意向词是疑问句子","sxindex":1}
{"explained":"意向词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是疑问句子","sxindex":1}
{"explained":"意向词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}


{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"下标是1","sxindex":1}
{"explained":"下标是1","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"下标是1","sxindex":1}
{"explained":"下标是1","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"对上一步结果取反","sxindex":1}
{"explained":"对上一步结果取反","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"否则","sxindex":1}
{"explained":"对上一步结果取反","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"分割词是疑问句子","sxindex":1}
{"explained":"分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"分割词是疑问句子","sxindex":1}
{"explained":"分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"分割个数是1","sxindex":1}
{"explained":"分割个数是1","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"分割词个数是1","sxindex":1}
{"explained":"分割个数是1","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"被包含词是43","sxindex":1}
{"explained":"被包含词是43","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"被包含词是43","sxindex":1}
{"explained":"被包含词是43","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"包含词是4","sxindex":1}
{"explained":"包含词是4","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"包含词是4","sxindex":1}
{"explained":"包含词是4","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"被分割词是疑问句子","sxindex":1}
{"explained":"被分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"被分割词是疑问句子","sxindex":1}
{"explained":"被分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"意向词是疑问句子","sxindex":1}
{"explained":"意向词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是疑问句子","sxindex":1}
{"explained":"意向词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"分割词是疑问句子","sxindex":1}
{"explained":"分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"分割词是疑问句子","sxindex":1}
{"explained":"分割词是疑问句子","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}


{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"对句子做相似处理是预处理逻辑","sxindex":1}
{"explained":"对句子做相似处理是预处理逻辑","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"对句子做相似处理是预处理逻辑","sxindex":1}
{"explained":"对句子做相似处理是预处理逻辑","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"查询所有被解释词的值","sxindex":1}
{"explained":"查询所有被解释词的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"要查询的字段是explained","sxindex":1}
{"explained":"查询所有被解释词的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"查询字段所有值","sxindex":1}
{"explained":"查询所有被解释词的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"筛选集合中相同个数大于2的值","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是集合数据","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"保存意向词的值","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"对集合数据分组","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"指标是2","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"过滤大于指标的分组集合","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"意向词是集合数据","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取意向词属性","sxindex":1}
{"explained":"筛选集合中相同个数大于2的值","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}

{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"获取所有教学语句","sxindex":1}
{"explained":"获取所有教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"查询所有被解释词的值","sxindex":1}
{"explained":"获取所有教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"筛选集合中相同个数大于2的值","sxindex":1}
{"explained":"获取所有教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}


{"guanxi":"是","renwu":"待解释词","rwindex":1,"shuxing":"获取唯一区别教学语句","sxindex":1}
{"explained":"获取唯一区别教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"获取所有有逻辑的被解释词","sxindex":1}
{"explained":"获取唯一区别教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"查询唯一区别教学语句","sxindex":1}
{"explained":"获取唯一区别教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"替换逻辑集合中的变量","sxindex":1}
{"explained":"获取唯一区别教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"保存自动生成的逻辑集合","sxindex":1}
{"explained":"获取唯一区别教学语句","guanxi":"是","renwu":"当前句子","rwindex":1,"shuxing":"待解释词是空","sxindex":1}


{"guanxi":"是","renwu":"获取唯一区别教学语句","rwindex":1,"shuxing":"预处理逻辑","sxindex":1}

{"guanxi":"前面","renwu":"获取有逻辑的待解释词","rwindex":1,"shuxing":"对句子做相似处理","sxindex":1}

{"guanxi":"前面","renwu":"对句子做相似处理","rwindex":1,"shuxing":"获取唯一区别教学语句","sxindex":1}

文件2

判断44是否包含5
    --你可以这样理解
被包含词是44
包含词是5
执行包含方法
如果正确
输出包含
否则
输出不包含
待解释词是空

输出包含
获取当前输入句子
执行输出方法
输出上一步结果
待解释词是空


输出不包含
获取当前输入句子
执行输出方法
输出上一步结果
待解释词是空

否则输出不包含
对上一步结果取反
输出不包含
待解释词是空
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老马识途2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值