diff --git a/prepare/build.gradle b/prepare/build.gradle index d1e6caa..322fff3 100644 --- a/prepare/build.gradle +++ b/prepare/build.gradle @@ -15,6 +15,7 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-core:2.17.2' implementation 'org.slf4j:slf4j-simple:1.7.36' implementation 'net.sourceforge.argparse4j:argparse4j:0.9.0' + implementation 'org.json:json:20220320' } sourceSets { diff --git a/prepare/src/main/guessNNprepare/NamedEntity.scala b/prepare/src/main/guessNNprepare/NamedEntity.scala index 23155aa..d8e5cab 100644 --- a/prepare/src/main/guessNNprepare/NamedEntity.scala +++ b/prepare/src/main/guessNNprepare/NamedEntity.scala @@ -1,8 +1,18 @@ package guessNNprepare -import org.apache.jena.rdf.model.Resource +import org.apache.jena.rdf.model.{Resource, ResourceFactory} +import org.json.{JSONException, JSONObject} -class NamedEntity(val rdfResource: Resource, val Name: String, val readableType: String) { +import scala.util.{Failure, Success, Try} + +class NamedEntity(val rdfResource: Resource, val name: String, val readableType: String) { + + def json: JSONObject = { + new JSONObject() + .put("name", name) + .put("type", readableType) + .put("uri", rdfResource.getURI) + } def canEqual(other: Any): Boolean = other.isInstanceOf[NamedEntity] @@ -20,3 +30,17 @@ class NamedEntity(val rdfResource: Resource, val Name: String, val readableType: } } +object NamedEntity { + def apply(json: JSONObject): Try[NamedEntity] = { + try { + Success(new NamedEntity( + ResourceFactory.createResource(json.getString("uri")), + json.getString("name"), + json.getString("type") + )) + } catch { + case e: JSONException => Failure(e) + } + } +} + diff --git a/prepare/src/main/guessNNprepare/mains/ExtractEntities.scala b/prepare/src/main/guessNNprepare/mains/ExtractEntities.scala index 26e2633..61f8f73 100644 --- a/prepare/src/main/guessNNprepare/mains/ExtractEntities.scala +++ b/prepare/src/main/guessNNprepare/mains/ExtractEntities.scala @@ -6,8 +6,9 @@ import net.sourceforge.argparse4j.inf.{ArgumentParser, Namespace} import org.apache.jena.query.QueryExecutionFactory import org.apache.jena.rdf.model.{InfModel, Model, ModelFactory} import org.apache.jena.reasoner.ReasonerRegistry +import org.json.JSONArray -import java.io.InputStream +import java.io.{FileWriter, InputStream} object ExtractEntities extends MainCommand { @@ -39,7 +40,16 @@ object ExtractEntities extends MainCommand { getMondialNamedEntities(kg, "Sea")) .distinct printf("Found %d guessable named entities\n", guessableEntities.size) - println(s"They would be written to ${jsonFilePath} (not implemented yet)") + + println(s"Writing entities to ${jsonFilePath}") + val jsonEntities:JSONArray = new JSONArray() + guessableEntities.foreach(e => jsonEntities.put(e.json)) + val writer = new FileWriter(jsonFilePath) + jsonEntities.write(writer) + writer.flush() + writer.close() + + println("Done.") } def getMondialNamedEntities(kg: Model, prefixedType: String): List[NamedEntity] = {