1
我有一個電影名稱列表,並希望在DBpedia中查看這些信息,例如「導演」等元數據。但是我很難用SPARQL識別正確的電影,因爲標題有時不完全匹配。使用SPARQL查詢與字符串的最佳匹配?
如何使用SPARQL從DBpedia中爲電影標題匹配最佳?
一些有問題的例子:
- 我的清單: 「虎膽龍威:用復仇」 與DBpedia中:
- 我的列表 「終極警探3」: 「公共的蜂」 與DBpedia中: 「公共的蜂:一隻狗的故事」
我目前的做法是查詢DBpedia endpoint所有的電影,然後通過標題單令牌(不含標點符號),檢查順序篩選和返回的第一個結果。例如:
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一般的字符串的最佳匹配?
謝謝!
SPARQL端點不是文本搜索引擎,因此,對SPARQL標準中的字符串匹配只有有限的支持。一些三重商店確實有一些擴展的支持,這取決於基礎實施。例如。一些三重商店使用Lucene進行文本搜索,而另一些像Virtuoso則有一些內置功能。 – AKSW
DBpedia端點使用Virtuoso,因此您可以查看http://docs.openlinksw.com/virtuoso/rdfsparqlrulefulltext/。例如。 'bif:contains'的索引文字比普通的REGEX快得多。來自文檔的一個例子是''foaf:Name?name。 ?名稱bif:包含「'rich *'」。',它可以匹配foaf:Name包含單詞Rich的所有主題。這將匹配理查德,裏奇等 – AKSW
@AKSW感謝與bif提示:包含。我會看看那個。 – dynobo