所以我试图根据从单独文件中获取的规则来修改Java中的数据集
数据集采用.dat文件的形式,如下所示
54 59 63 85 86 90 93 98 107 113 Annot_4 Annot_5
39 40 52 55 59 63 85 86 90 93 99 108 114 Annot_1 Annot_4 Annot_5
泛化规则如下所示
Annot_1,Annot_3 => Annot_X
Annot_2,Annot_5 => Annot_Y
所以基本上我想要遍历数据集中的每一行,如果该行包含左侧的任何注释,则添加右侧,以便新数据集如下所示:
54 59 63 85 86 90 93 98 107 113 Annot_4 Annot_5 Annot_Y
39 40 52 55 59 63 85 86 90 93 99 108 114 Annot_1 Annot_4 Annot_5 Annot_X 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();
}
非常感谢任何帮助。
答案 0 :(得分:0)
您的代码有几个问题。首先,它的结构错误:你的内部循环只运行一次,因为datasetBR
将耗尽行并且永远不会倒带,而外部循环仍然忙于解析规则。
我要做的事情:
HashMap<String, String>
。 (更好的方法是使用Guava的HashMultimap,这样你甚至可以存储规则的分割版本,但这不是必需的。)findRulesByDatasetLine(rulesMap, datasetLine)
。此函数的结果将返回包含找到的规则的字符串(例如&#34; Annot_X Annot_Y&#34;)。您可以直接将其连接到行尾,并将其直接写入作者。函数String findRulesByDatasetLine(Map<String, String> rulesMap, String datasetLine)
将首先定义一个空结果字符串,然后只需loop through each entry in the map,拆分输入键,如果在datasetLine中找到任何拆分部分,则将条目值添加到结果中串。
希望这会有所帮助。祝你好运!