Prepare: allow multiple entities with same name

This commit is contained in:
Francesco 2022-04-16 13:01:08 +02:00
parent 1cfee42c47
commit e4902fe995
3 changed files with 21 additions and 21 deletions

View File

@ -16,12 +16,13 @@ object Main extends App {
})
kg.read(mondialDataset, null, "TTL");
printf("Loaded %s triples\n", kg.listStatements().toList.size)
val guessableEntities = NamedEntitySet() ++
val guessableEntities = (List[NamedEntity]() ++
getMondialNamedEntities(kg, "Country") ++
getMondialNamedEntities(kg, "City") ++
getMondialNamedEntities(kg, "Continent") ++
getMondialNamedEntities(kg, "Sea")
printf("Found %d guessable named entities\n", guessableEntities.set.size)
getMondialNamedEntities(kg, "Sea"))
.distinct
printf("Found %d guessable named entities\n", guessableEntities.size)
}
def getMondialNamedEntities(kg: Model, prefixedType: String): List[NamedEntity] = {
@ -35,8 +36,8 @@ object Main extends App {
while (resultSet.hasNext) {
val solution = resultSet.next()
result = result :+ new NamedEntity(
solution.getLiteral("?name").getString,
solution.getResource("?entity"),
solution.getLiteral("?name").getString,
prefixedType
)
}

View File

@ -1,5 +1,20 @@
import org.apache.jena.rdf.model.Resource
class NamedEntity(val Name: String, val entity: Resource, val readableType: String) {
class NamedEntity(val rdfResource: Resource, val Name: String, val readableType: String) {
def canEqual(other: Any): Boolean = other.isInstanceOf[NamedEntity]
override def equals(other: Any): Boolean = other match {
case that: NamedEntity =>
(that canEqual this) &&
rdfResource == that.rdfResource
case _ => false
}
override def hashCode(): Int = {
val state = Seq(rdfResource)
state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b)
}
}

View File

@ -1,16 +0,0 @@
class NamedEntitySet(val set: Set[NamedEntity] = Set()) {
def ++(iterable: Iterable[NamedEntity]): NamedEntitySet = {
val nameSet = set.map(e => e.Name)
val duplicateNameEntity = iterable.find(e => nameSet.contains(e.Name))
if (duplicateNameEntity.nonEmpty) {
System.err.printf("Error: multiple entities exist with name %s\n", duplicateNameEntity.get.Name)
System.exit(1)
}
NamedEntitySet(set ++ iterable)
}
}
object NamedEntitySet {
def apply(set: Set[NamedEntity] = Set()): NamedEntitySet = new NamedEntitySet(set)
}