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