![](/img/trans.png)
[英]SPARQL Query for searching all properties of one type to match a string
[英]Query for best match to a string with SPARQL?
我有一個電影標題列表,想要在DBpedia中查找這些元素,如“導演”。 但我很難用SPARQL識別正確的電影,因為標題有時並不完全匹配。
如何使用SPARQL從DBpedia獲得電影片名的最佳匹配?
一些有問題的例子:
我目前的方法是查詢所有電影的DBpedia端點 ,然后通過檢查單個標記(沒有標點符號)進行過濾,按標題排序並返回第一個結果。 例如:
SELECT ?resource ?title ?director WHERE {
?resource foaf:name ?title .
?resource rdf:type schema:Movie .
?resource dbo:director ?director .
FILTER (
contains(lcase(str(?title)), "die") &&
contains(lcase(str(?title)),"hard")
)
}
ORDER BY (?title)
LIMIT 1
這種方法非常慢,有時也會失敗,例如:
SELECT ?resource ?title ?director WHERE {
?resource foaf:name ?title .
?resource rdf:type schema:Movie .
?resource dbo:director ?director .
FILTER (
contains(lcase(str(?title)), "hachi")
)
}
ORDER BY (?title)
LIMIT 10
其中正確的結果在第二位:
resource title director
http://dbpedia.org/resource/Chachi_420 "Chachi 420"@en http://dbpedia.org/resource/Kamal_Haasan
http://dbpedia.org/resource/Hachi:_A_Dog's_Tale "Hachi: A Dog's Tale"@en http://dbpedia.org/resource/Lasse_Hallström
http://dbpedia.org/resource/Hachiko_Monogatari "Hachikō Monogatari"@en http://dbpedia.org/resource/Seijirō_Kōyama
http://dbpedia.org/resource/Thachiledathu_Chundan "Thachiledathu Chundan"@en http://dbpedia.org/resource/Shajoon_Kariyal
任何想法如何解決這個問題? 甚至更好: 如何通常使用SPARQL查詢與字符串的最佳匹配?
謝謝!
我修改了評論中提到的正則表達式方法,並提出了一個非常好的解決方案,比我用bif得到的更好:contains:
SELECT ?resource ?title ?match strlen(str(?title)) as ?lenTitle strlen(str(?match)) as ?lenMatch
WHERE {
?resource foaf:name ?title .
?resource rdf:type schema:Movie .
?resource dbo:director ?director .
bind( replace(LCASE(CONCAT('x',?title)), "^x(die)*(?:.*?(hard))*(?:.*?(with))*.*$", "$1$2$3") as ?match )
}
ORDER BY DESC(?lenMatch) ASC(?lenTitle)
LIMIT 5
它並不完美,所以我仍然願意接受建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.