我被要求从一个csv文件创建一个词向量空间。因此,我需要将单词及其向量(大小为57)提取到字典中,以便能够将其重新用于未来的操作。 我的csv格式给我带来了很多问题,因为它基本上是带有键的文本,并且将所有的双精度字符都用空格隔开,并且直到现在我都无法正确地将字符串和双精度部分分开。
那么您是否知道如何将这个文件解析成包含(键,向量)类型条目的字典。
非常感谢。
这是csv文件的演示:
key1 4.0966564 7.963437 -2.1844673 1.9319566 -0.04495791 2.454401 3.1006012 -0.3813638 1.567303 -2.2067556 3.44506744 -4.382278 4.1457844 2.342756 -2.7707205 3.5015 2.5717492 -2.6846366...
key2 -3.968007 0.86151505 0.06163538 1.918614 0.34340435 -1.5178788 1.3857365 0.230331 0.7025755 -2.6575062 -0.7426953 3.1636698 2.8441591 0.4522623 3.3907628 2.425691 -1.2052362....
。 。
答案 0 :(得分:0)
这种数据结构称为多图:一个键可以具有多个值。
您可以在库中找到示例。
如果您不想拥有依赖关系,并希望编写自己的依赖关系,它可能看起来像这样:
public class MultiMap {
private Map<String, List<Double>> multi = new HashMap<>();
public void put(String key, Double newValue) {
if (newValue != null) {
List<Double> values = (this.multi.containsKey(key) ? this.multi.get(key) : new ArrayList<>());
values.add(newValue);
this.multi.put(key, values);
}
}
}
可以使用泛型,但是我现在懒得打扰。此示例适用于您的狭窄用例。
通过在正则表达式"\\s+"
处进行拆分,将每一行拆分为令牌。第一个值是键;遍历所有其他对象,以将其添加到多地图中。
答案 1 :(得分:0)
您可以执行以下操作:
String line = "key1 4.0966564 7.963437";
String[] parts = line.split(" ");
String key = parts[0];
ArrayList<Double> values = new ArrayList<Double>();
for(int i =1; i < parts.length; i++){
String doubleAsString = parts[i];
values.add(Double.valueOf(doubleAsString));
}
然后将此元素添加到地图中。