Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文本文件数据集上的注释泛化_Java - Fatal编程技术网

Java 文本文件数据集上的注释泛化

Java 文本文件数据集上的注释泛化,java,Java,因此,我试图根据从单独文件中获取的规则修改Java中的数据集 数据集是一个.dat文件形式的文件,如下所示 54 59 63 85 86 90 93 98 107 113安诺_4安诺_5 39 40 52 55 59 63 85 86 90 93 99 108 114安诺图1安诺图4安诺图5 泛化规则如下所示 Annot_1,Annot_3=>Annot_X Annot_2,Annot_5=>Annot_Y 因此,基本上我想检查数据集中的每一行,如果该行包含来自左侧的任何注释,则添加右侧,这样新

因此,我试图根据从单独文件中获取的规则修改Java中的数据集

数据集是一个.dat文件形式的文件,如下所示

54 59 63 85 86 90 93 98 107 113安诺_4安诺_5

39 40 52 55 59 63 85 86 90 93 99 108 114安诺图1安诺图4安诺图5

泛化规则如下所示

Annot_1,Annot_3=>Annot_X

Annot_2,Annot_5=>Annot_Y

因此,基本上我想检查数据集中的每一行,如果该行包含来自左侧的任何注释,则添加右侧,这样新数据集如下所示:

54 59 63 85 86 90 93 98 107 113不能4不能5不能

39 40 52 55 59 63 85 86 90 93 99 108 114不能1不能4不能5不能X不能Y

到目前为止,我所做的只是应用第一条规则,然后停止

try {
        BufferedReader rulesBR = new BufferedReader(new FileReader(generalizationRules));
        BufferedReader datasetBR = new BufferedReader(new FileReader(dataset));
        String rulesLine;
        String datasetLine;
        String parts1[];
        String rhs;
        rulesLine = rulesBR.readLine();

        while (rulesLine!=null){
            //System.out.println(rulesLine);
            String parts[] = rulesLine.split("=>");
            String lhs[] = parts[0].split(",");

            rhs = parts[1];
            for (String part : lhs){
                System.out.println(part);
                while ((datasetLine =datasetBR.readLine())!=null){      
                    parts1 = datasetLine.split("\\S+");
                    System.out.println(parts1);
                    if (datasetLine.contains(part))
                        writer.write(datasetLine.concat(rhs));  
                    else
                        writer.write(datasetLine);
                }
                ArrayList<String> ruleSetRow = new ArrayList<String>();
            }
            rulesLine =rulesBR.readLine();
        }
        rulesBR.close();
        datasetBR.close();
    }

任何帮助都将不胜感激。

您的代码有几个问题。首先也是最重要的一点是,它的结构是错误的:您的内部循环只运行一次,因为datasetBR将用尽行数,并且永远不会被重绕,而外部循环仍在忙于解析规则

我要做的是:

将所有规则读入左侧和右侧的HashMap。更好的方法是使用Guava的HashMultimap,这样您甚至可以存储规则的拆分版本,但这并不是真正必要的。 然后在第二个循环中,像内部循环一样遍历数据集的所有行。 对每一行执行一个方法调用findrulesbydatasetlineralesmap,datasetLine。此函数的结果将返回一个包含找到的规则的字符串,例如Annot_X Annot_Y。您可以直接将其连接到行尾,然后直接将其写入编写器。 函数String findRulesByDatasetLineMap rulesMap,String datasetLine将首先定义一个空的结果字符串,然后简单地拆分条目键,如果在datasetLine中找到任何拆分部分,则将条目值添加到结果字符串中

希望这有帮助。祝你好运