私はムービータイトルのリストを持っていて、DBpediaで "director"のようなメタ情報を探しています。しかし、タイトルが正確に一致しないことがあるため、SPARQLで正しいムービーを特定するのは難しいです。SPARQLを使用して文字列に最適な照合をクエリしますか?
を入手するには、をSPARQLを使用してDBpediaの映画のタイトルに一致させるにはどうすればよいですか?
いくつかの問題の例:
- マイリスト:
- マイリスト "ダイ・ハード3":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よりもインデックス付きリテラルではるかに高速です。 docsの例は '?foaf:Name?nameです。 ?name bif: '' rich * '"。"を含んでいます。これは 'foaf:Name'にRichという単語が含まれているすべての主題に一致します。これはリチャード、リッチーなどと一致するでしょう。 – AKSW
@AKSW bif:containsのヒントをありがとう。私はそれを見てみましょう。 – dynobo