ontology 查询的搜索算法选项?

Search algorithm options for ontology querying?

我开发了一个工具,可以搜索我创作的 ontology。它将搜索作为 SPARQL 查询提交。

我收到一些反馈,说我的搜索实现是全或-none,或 "binary"。换句话说,如果用户的输入与 ontology 中的术语不完全匹配,他们根本不会得到任何匹配。

我被要求添加一些更灵活的,或者 "advanced" 搜索算法。建议使用索引和词袋搜索。

任何人都可以提供一些在 ontology 上实现不需要文字匹配的搜索方法的示例吗?

首先,您要匹配哪种实体(文字或 URI 的字符串转换?),您 运行 现在使用哪种 SPARQL 查询?是这样的吗?

?term ?predicate "user input" .

如果您正在搜索文字,您可以通过使用不区分大小写的正则表达式过滤立即使搜索更加灵活,尽管这可能会使您的搜索变慢,并且它不会捕获某些单词标记存在但顺序不同的情况。在下面的示例中,您应该首先限制 ?term?predicate 的类型,或者甚至在 ?userInput

上过滤字符串数据类型
?term ?predicate ?someLiteral .
FILTER(regex(?someLiteral), "user input", "i"))

几个三元组提供对全文搜索和结果评分的支持。这些通常是 SPARQL 语言的扩展。

例如,Virtuoso 和其他一些人提供了 bif:contains 谓词。 Virtuoso 还提供 faceted search web interface(我认为还有一项服务。)我对 BlazegraphStardog[ 中基于网络的全文搜索感到满意=39=],但此时我不能说任何关于将它们与 SPARQL 查询一起使用以获得搜索模式分数的信息。有些 (GraphDB) 甚至支持与 Lucene 或 Solr* 的显式集成,因此您可以利用它们的搜索语言。

最后...您是否使用 OWL APIRDF4J 之类的库来访问你的ontology?如果是这样,您当然可以将术语与任何文字之间的关系保存在 Java 原生数据结构中,然后直接使用像 Lucene 这样的模糊搜索组件将每个文字索引为 "document" 然后搜索索引中的用户输入。

你为什么不 post 你的 ontology 并举例说明你希望以非二进制方式执行的搜索。我(或其他人)可以尝试向您展示一个最小的实现。

*Solr 集成似乎仅在 GraphDB 的商业许可版本中提供