jgrapht - 如何使用CSVImporter和创建顶点供应商
问题描述
我找不到任何有关如何使用 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 使用顶点供应商。
可以在相应的测试类CSVImporterTest中找到如何使用 CSV 导入器的各种示例。
有两种不同的方法可以使用顶点供应商创建图形。要么使用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"));
请注意,作为顶点供应商的替代方案,您还可以setVertexFactory
在类中使用该函数CSVImporter
。同样,使用您的代码:
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"));
免责声明:在没有数据的情况下,上述代码未经测试。
推荐阅读
- php - 没有这样的 Token-StripeError
- php - PHP sqlsrv_fetch_array with "while loop" crosses the first row
- java - Stream.findFirst 与 Optional.of 不同?
- c# - 尝试在基抽象类中使用标记为内部的接口注入受保护的构造函数时出现不一致的可访问性错误
- tsql - pyspark中的窗口函数(滞后,领先)实现?
- pthreads - 线程再次遇到thread_create语句会不会重新启动?
- php - 表单提交/PHP AJAX 后在同一页面上获取成功消息
- tensorflow - Tensorflow 不接受输入占位符的向量
- typescript - 为什么在 TypeScript 中声明 const foo = 3 是合法的?
- go - 使用 golang.org/x/oauth2 通过 golang Facebook 身份验证获取电子邮件数据