Прежде всего, вы хотите выбрать все термины, которые являются существительными. Как видно из результата запроса в примере запроса, эта информация фиксируется отношением terms:hasPoS
. Так, специально запрашивать все существительные, мы могли бы сделать это:
PREFIX terms: <http://wiktionary.dbpedia.org/terms/>
SELECT ?term
WHERE {
?term terms:hasPoS terms:Noun .
}
LIMIT 100
Result
Следующая вещь, которую вы хотите только существительные определенного языка. По-видимому, это связано с отношением dc:language
, поэтому мы добавляем дополнительное ограничение на это отношение. Скажем, мы хотим, чтобы все английские существительные:
PREFIX terms: <http://wiktionary.dbpedia.org/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?term
WHERE {
?term terms:hasPoS terms:Noun ;
dc:language terms:English .
}
LIMIT 100
Result
Итак, мы теперь выбрать то, что вы хотите, но мы еще не имеют выхода в формате, который вы хотите, в приведенном выше запросе просто возвращает идентификатор смысла термина, а не строковое значение фактического термина. Как мы можем видеть на выходе из примера запроса, строковое значение захватывается rdfs:label
собственности, поэтому мы добавим, что:
PREFIX terms: <http://wiktionary.dbpedia.org/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT ?term ?termLabel
WHERE {
?term terms:hasPoS terms:Noun ;
dc:language terms:English ;
rdfs:label ?termLabel .
}
LIMIT 100
Result
Если вы теперь посмотрите на результат, этот запрос в вы посмотрите, что с языком происходит что-то странное: несмотря на то, что мы думали, что мы выбрали английский, мы также возвращаем метки, имеющие другой языковой тег (например, «@ru»). Для того, чтобы удалить эти результаты, мы можем ограничить наш запрос дальше, и сказать, что мы хотим обратно этикетки на английском языке:
PREFIX terms: <http://wiktionary.dbpedia.org/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT ?term ?termLabel
WHERE {
?term terms:hasPoS terms:Noun ;
dc:language terms:English ;
rdfs:label ?termLabel .
FILTER(langMatches(lang(?termLabel), "en"))
}
LIMIT 100
Result
Наконец, гендерный/род. Здесь я не уверен. Если посмотреть на некоторые примеры ресурсов в данных wiktionary (например, entry for dog), я бы сказал, что эта информация фактически не присутствует в данных.