Нахождение трех самых длинных подстрок в строке с использованием SPARQL в Wikidata Query Service и ранжирование их по строкам - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь определить три самых длинных подстроки из строки, используя SPARQL и Wikidata Query Service, а затем ранжировать

  • подстроки в строке длиной
  • строки по длине любой из этих самых длинных подстрок.

Мне удалось определить первую и вторую подстроку из строки, и, конечно, я мог просто создать аналогичные дополнительные строки для решения проблемы, но это кажется уродливым и неэффективным, поэтому мне интересно, если кто-нибудь здесь знает о лучшем способе получить есть.

Это упрощенная версия кода, хотя я оставил некоторые вспомогательные переменные, которые я использую для отслеживания прогресса в пути. Вы можете попробовать это здесь .

Разъяснение в ответ на этот комментарий : если необходимо обработать этот запрос как подзапрос и передать ему результаты из другого подзапроса, это нормально для меня. Чтобы получить представление о видах использования, которые я имею в виду, см. эту демонстрацию .

SELECT * WHERE {
  {
    VALUES (?title) {
      ("What are the longest three words in this string?")
      ("A really complicated title")
      ("OneWordTitleInCamelCase")
      ("Thanks for your help!")
    }
  }
  BIND(STRLEN(REPLACE(?title, " ", "")) AS ?titlelength)

  BIND(STRBEFORE(?title, " ") AS ?substring1)
  BIND(STRLEN(REPLACE(?substring1, " ", "")) AS ?substring1length)
  BIND(STRAFTER(?title, " ") AS ?postfix)
  BIND(STRLEN(REPLACE(?postfix, " ", "")) AS ?postfixlength)
  BIND(STRBEFORE(?postfix, " ") AS ?substring2)
  BIND(STRLEN(REPLACE(?substring2, " ", "")) AS ?substring2length)
}
ORDER BY DESC(?substring1length) 

Ожидаемые результаты:

longsubstring   substringlength
OneWordTitleInCamelCase 23
complicated 11
longest 7
really  6
string  6
Thanks  6
title   5
three   5
your    4
help    4

Фактические результаты:

title   titlelength substring1  substring1length    postfix postfixlength   substring2  substring2length
Thanks for your help!   18  Thanks  6   for your help!  12  for 3
What are the longest three words in this string?    40  What    4   are the longest three words in this string? 36  are 3
A really complicated title  23  A   1   really complicated title    22  really  6
OneWordTitleInCamelCase 23      0       0       0

...