我需要一些帮助。
我在TreeMap TreeMap<String,TreeMap<String,Integer>>
我的文本输出如下所示(单行示例):
Phoneme "Y": ["**"=46,15%] ["I"=30,77%] ["Y"=7,69%] ["i:"=15,38%]
这意味着音素Y在31%被认可为我,7,7%为Y等......
因此,我需要一个表(电子表格),它在每个Phoneme上具有垂直(选定的音素)和水平(预测)行,而在单元格中具有与所选行和行相对应的概率。这意味着例如在线&#34; Y&#34;如上所述的概率,其他一切都是0%
最佳解决方案是什么?我应该手动编程来获取这些信息并将其按顺序保存在csv中,还是有更好的方法?
答案 0 :(得分:1)
使用API没有任何问题,特别是如果您希望数据包含特殊字符。但是,这里有一个Java 8 one liner,你可以使用它,如果你有一个CSV API,它会更干净:
treeMap.entrySet().forEach((e)->{
System.out.print("\""+e.getKey()+"\"");
e.getValue().entrySet().forEach((m)->System.out.print(",\"" + m.getKey() + "\"," + m.getValue()));
System.out.println();
});
“Y”, “**”,46.15, “I”,30.77, “Y”,7.69, “I”,15.38
答案 1 :(得分:0)
以下是使用传统Java创建表格CSV输出但没有外部库的示例。
static String toCSV(Map<String, Map<String, Integer>> phonemeStats)
{
StringBuilder csv = new StringBuilder(512);
// get ordered set of all statistic names
Set<String> statNames = new TreeSet<String>();
for (Map<String, Integer> stats: phonemeStats.values()) {
statNames.addAll(stats.keySet());
}
// write column headings line
csv.append("phoneme");
for (String name: statNames) {
csv.append(",").append(name);
}
// write each phoneme line
for (Map.Entry<String, Map<String, Integer>> entry: phonemeStats.entrySet()) {
csv.append(System.lineSeparator());
csv.append(entry.getKey());
for (String name: statNames) {
Integer value = entry.getValue().get(name);
csv.append(",");
if (value != null) {
csv.append((value / 100d) + "%");
}
}
}
return csv.toString();
}
使用此输入(作为Map<String, Map<String, Integer>>
):
Phoneme "Y": ["**"=46,15%] ["I"=30,77%] ["Y"=7,69%] ["i:"=15,38%]
Phoneme "Z": ["**"=32,45%] ["I"=10,42%] ["X"=26,97%] ["i:"=5,38%]
上述方法返回:
phoneme,**,I,X,Y,i:
Y,46.15%,30.77%,,7.69%,15.38%
Z,32.45%,10.42%,26.97%,,5.38%
然后您可以将该输出写入.CSV
文件并在Excel中打开它。