DBPedia: SPARQL-запрос к полю, начинающийся с литерала - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь получить соответствующую запись DBPedia для списка компаний.Я не могу понять, как сделать приблизительные совпадения.Пример: «Audi» называется «Audi AG» в DBPedia, а «Novartis» называется «Novartis International AG» (foaf: name).Как мне искать записи с rdf: type = dbo: Company и именем, наиболее близким к тому, что я предоставляю?

Я использую SPARQL в качестве языка запросов.(Но я готов измениться, если есть преимущество.)

select ?company
where {
  ?company foaf:name "Novartis"@en.
  ?company a dbo:Company.
}
LIMIT 100

Я не получаю никакого удара, но http://dbpedia.org/page/Novartis должен быть найден.Соответствие началу имени может быть достаточно хорошим, чтобы получить это.

1 Ответ

1 голос
/ 16 апреля 2019

Для DBpedia лучшим вариантом может быть использование полнотекстового поиска bif:contains псевдо-свойства:

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  ?name bif:contains "Novartis"@en.
}

Эта функция относится к базе данных Virtuoso, которая обеспечиваетКонечная точка DBpedia SPARQL.

Если вы хотите придерживаться стандартного SPARQL , для совпадения в начале только имени:

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  FILTER strStarts(?name, "Novartis")
}

В отличие от полнотекстовой функции, эта версия не может использовать текстовый индекс, поэтому она медленнее.

Если вы хотите более гибкое совпадение :

SELECT ?company {
  ?company a dbo:Company.
  ?company foaf:name ?name.
  FILTER contains(lCase(?name), lCase("Novartis"))
}

Это найдет регистронезависимое совпадение в любом месте имени.

...