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 因此,基本上我想检查数据集中的每一行,如果该行包含来自左侧的任何注释,则添加右侧,这样新数据集如下所示: 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 到目前为止,我所做的只是应用第一条规则,然后停止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 因此,基本上我想检查数据集中的每一行,如果该行包含来自左侧的任何注释,则添加右侧,这样新
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中找到任何拆分部分,则将条目值添加到结果字符串中 希望这有帮助。祝你好运