Prepare: allow multiple entities with same name
This commit is contained in:
parent
1cfee42c47
commit
e4902fe995
|
|
@ -16,12 +16,13 @@ object Main extends App {
|
||||||
})
|
})
|
||||||
kg.read(mondialDataset, null, "TTL");
|
kg.read(mondialDataset, null, "TTL");
|
||||||
printf("Loaded %s triples\n", kg.listStatements().toList.size)
|
printf("Loaded %s triples\n", kg.listStatements().toList.size)
|
||||||
val guessableEntities = NamedEntitySet() ++
|
val guessableEntities = (List[NamedEntity]() ++
|
||||||
getMondialNamedEntities(kg, "Country") ++
|
getMondialNamedEntities(kg, "Country") ++
|
||||||
getMondialNamedEntities(kg, "City") ++
|
getMondialNamedEntities(kg, "City") ++
|
||||||
getMondialNamedEntities(kg, "Continent") ++
|
getMondialNamedEntities(kg, "Continent") ++
|
||||||
getMondialNamedEntities(kg, "Sea")
|
getMondialNamedEntities(kg, "Sea"))
|
||||||
printf("Found %d guessable named entities\n", guessableEntities.set.size)
|
.distinct
|
||||||
|
printf("Found %d guessable named entities\n", guessableEntities.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
def getMondialNamedEntities(kg: Model, prefixedType: String): List[NamedEntity] = {
|
def getMondialNamedEntities(kg: Model, prefixedType: String): List[NamedEntity] = {
|
||||||
|
|
@ -35,8 +36,8 @@ object Main extends App {
|
||||||
while (resultSet.hasNext) {
|
while (resultSet.hasNext) {
|
||||||
val solution = resultSet.next()
|
val solution = resultSet.next()
|
||||||
result = result :+ new NamedEntity(
|
result = result :+ new NamedEntity(
|
||||||
solution.getLiteral("?name").getString,
|
|
||||||
solution.getResource("?entity"),
|
solution.getResource("?entity"),
|
||||||
|
solution.getLiteral("?name").getString,
|
||||||
prefixedType
|
prefixedType
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,20 @@
|
||||||
import org.apache.jena.rdf.model.Resource
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue