私はウィキデータ ツールキットを使用しており、すべてのイベントのリストを取得したいと考えています。
ダンプからイベントをフィルター処理したい EntityDocumentProcessor を作成しました。イベント ドキュメントには IDQ1190554
があり、現在の itemDocument のインスタンスがイベントの「インスタンス」(P31) であるかどうかを何らかの方法で確認する必要があることはわかっています。
@Override
public void processItemDocument(ItemDocument itemDocument) {
boolean isEvent = false;
for (StatementGroup statementGroup : itemDocument.getStatementGroups()) {
switch (statementGroup.getProperty().getId()) {
case "P31": // P31 is "instance of"
isEvent = containsValue(statementGroup, filterClass);
break;
case "P279": // P279 is "subclass of"
if (!isEvent) {
isEvent = containsValue(statementGroup, filterClass);
}
break;
}
}
}
private boolean containsValue(StatementGroup statementGroup, Value value) {
for (Statement s : statementGroup.getStatements()) {
if (value.equals(s.getValue())) {
return true;
}
}
return false;
}
このアプローチは、人々を獲得するのに非常にうまく機能しました。しかし、イベントの問題は、WW2 ( https://www.wikidata.org/wiki/Q362 ) のようなイベントが直接マッピングされていないことです。イベントはどこかに隠されています。現在の itemDocument がイベントであるかどうかを簡単に確認する方法を知っている人はいますか?