如何使用 CSVImporter 和创建顶点供应商

How to use CSVImporter and create vertex supplier

我找不到任何关于如何使用 CSVImporter (1.5.0) 的文档。我有一个非常简单的包含整数的 csv 文件,我正在尝试使用以下代码导入它:

Graph<String, DefaultEdge> wpCategories = new DirectedMultigraph(DefaultEdge.class);
CSVImporter<String, DefaultEdge> importer = new CSVImporter(CSVFormat.EDGE_LIST);
importer.importGraph(wpCategories, new File("hypernymGraphWithEntities_WP1-small.csv"));

我刚收到“该图不包含顶点供应商”异常。如何创建顶点供应商?

JGraphT 图由顶点和边对象组成。从文本文件导入图形时,导入器必须以某种方式为它在文本文件中遇到的每个顶点创建顶点对象。这些对象必须与您在图表中定义的类型相同。为了生成这些对象,JGraphT 使用顶点供应商。

如何使用 CSV 导入器的各种示例可以在相应的测试中找到 class CSVImporterTest

有两种不同的方法可以使用顶点供应商创建图形。要么使用 GraphTypeBuilder,要么使用图形构造函数之一。这是有向图的示例。

//Builder
Graph<String,DefaultEdge> g1 = GraphTypeBuilder.directed().allowingMultipleEdges(false).allowingSelfLoops(false).weighted(false).edgeClass(DefaultEdge.class).vertexSupplier(SupplierUtil.createStringSupplier(1)).buildGraph();

//Constructor
Graph<String,DefaultEdge> g2 = new DefaultDirectedGraph(SupplierUtil.createStringSupplier(1),SupplierUtil.DEFAULT_EDGE_SUPPLIER,false);

因此应用于您的示例将得到:

Graph<String, DefaultEdge> wpCategories = new DirectedMultigraph(SupplierUtil.createStringSupplier(1),SupplierUtil.DEFAULT_EDGE_SUPPLIER,false);
CSVImporter<String, DefaultEdge> importer = new CSVImporter(CSVFormat.EDGE_LIST);
importer.importGraph(wpCategories, new File("hypernymGraphWithEntities_WP1-small.csv"));

请注意,作为顶点供应商的替代方案,您还可以使用 CSVImporter class 中的 setVertexFactory 函数。同样,使用您的代码:

Graph<String, DefaultEdge> wpCategories = new DirectedMultigraph(DefaultEdge.class);
CSVImporter<String, DefaultEdge> importer = new CSVImporter(CSVFormat.EDGE_LIST);
Function<String, String> vertexFactory = x -> x;
importer.setVertexFactory(vertexFactory);
importer.importGraph(wpCategories, new File("hypernymGraphWithEntities_WP1-small.csv"));

免责声明:由于缺乏数据,上述代码未经过测试。