Prepare: fix so that CNN library can be called without runtime errors

This commit is contained in:
Francesco 2022-04-18 12:21:28 +02:00
parent ef3d96d024
commit 815e9f1b1f
2 changed files with 15 additions and 6 deletions

View File

@ -11,7 +11,7 @@ repositories {
dependencies { dependencies {
implementation 'org.scala-lang:scala3-library_3:3.1.2' implementation 'org.scala-lang:scala3-library_3:3.1.2'
implementation 'org.apache.jena:apache-jena-libs:4.4.0' implementation 'org.apache.jena:apache-jena-libs:3.17.0'
implementation 'org.apache.logging.log4j:log4j-core:2.17.2' implementation 'org.apache.logging.log4j:log4j-core:2.17.2'
implementation 'org.slf4j:slf4j-simple:1.7.36' implementation 'org.slf4j:slf4j-simple:1.7.36'
implementation 'net.sourceforge.argparse4j:argparse4j:0.9.0' implementation 'net.sourceforge.argparse4j:argparse4j:0.9.0'

View File

@ -22,12 +22,14 @@ object ComputeConcepts extends MainCommand {
parser.addArgument("guessable_entities").`type`(Arguments.fileType().verifyCanRead()).help("JSON file containing all guessable entities") parser.addArgument("guessable_entities").`type`(Arguments.fileType().verifyCanRead()).help("JSON file containing all guessable entities")
parser.addArgument("target").help("URI of the entity that should be guessed") parser.addArgument("target").help("URI of the entity that should be guessed")
parser.addArgument("json_output").`type`(Arguments.fileType().verifyCanWrite().or().verifyCanWriteParent()).help("JSON file where the concepts will be saved")
} }
override def execute(ARGS: Namespace): Unit = { override def execute(ARGS: Namespace): Unit = {
// CLI args // CLI args
val entitiesFilePath = Paths.get(ARGS.getString("guessable_entities")) val entitiesFilePath = Paths.get(ARGS.getString("guessable_entities"))
val guessTarget = ARGS.getString("target") val guessTarget = ARGS.getString("target")
val outputFilePath = Paths.get(ARGS.getString("json_output"))
println(s"Loading entities from ${entitiesFilePath}") println(s"Loading entities from ${entitiesFilePath}")
val entities: List[NamedEntity] = loadEntitiesOrFail(entitiesFilePath) val entities: List[NamedEntity] = loadEntitiesOrFail(entitiesFilePath)
@ -40,18 +42,25 @@ object ComputeConcepts extends MainCommand {
val dataGraph = Utils.loadMondialDataset().get val dataGraph = Utils.loadMondialDataset().get
println(s"Loaded ${dataGraph.listStatements().toList.size()} triples") println(s"Loaded ${dataGraph.listStatements().toList.size()} triples")
val entityVar = Var.alloc("e") val entityVar = Var.alloc("Neighbor_0")
val entityTable = new Table(List(entityVar).asJava) val entityTable = new Table(List(entityVar).asJava)
entities entities
.map(entity => dataGraph.createResource(entity.rdfResource)) .map(entity => dataGraph.createResource(entity.rdfResource.getURI))
.map(resource => resource.asNode()) .map(resource => resource.asNode())
.map(node => BindingFactory.binding(entityVar, node)) .map(node => BindingFactory.binding(entityVar, node))
.foreach(binding => entityTable.addBinding(binding)) .foreach(binding => entityTable.addBinding(binding))
val cnnPartition = new Partition(new ConceptualKNNModel(dataGraph), List(guessTarget).asJava, entityTable, 0) val cnnPartition = new Partition(new ConceptualKNNModel(dataGraph), List(guessTarget).asJava, entityTable, -1)
println("Starting concept computation") println("Starting concept computation")
cnnPartition.fullPartitioning(new AtomicBoolean(false)) val stop = new AtomicBoolean(false)
println(s"Computation finished, ${cnnPartition.getNbConcepts} concepts computed") val partitionThread = new Thread(() => cnnPartition.fullPartitioning(stop))
val startTime = System.currentTimeMillis()
partitionThread.start()
partitionThread.join(60000)
stop.set(true)
partitionThread.join()
println(s"Concept computation finished, ${(System.currentTimeMillis() - startTime)/1000}s elapsed.")
Files.writeString(outputFilePath, cnnPartition.toJson)
} }