上网我遇到了Aquabrowser (无需点击,我会发布相关部分的图片)。
它有一种很好的方式来呈现搜索结果和发现语义链接的实体。
在左侧,您有他们输入的单词和相关单词。 单击它们可以优化您的结果。
现在作为示例项目,我有一个电影实体和主题(如 worrd-war-2 或 prison-escape)及其关系的数据集。
现在我设想了几个用例,首先是用户以关键字开头的情况。 例如“第二次世界大战”。
然后我想以某种方式计算相关关键字并对它们进行排名。
我想像这样的一些 sql 查询:
假设“第二次世界大战”的 ID 为 3。
select keywordId, count(keywordId) as total from keywordRelations
WHERE movieId IN (select movieId from keywordRelations
join movies using (movieId)
where keywordId=3)
group by keywordId order by total desc
基本上应该选择所有也有关键字 world-war-2 的电影,然后查找这些电影也有的关键字,并选择出现次数最多的电影。
我认为使用这些关键词我可以选择最匹配的电影并且有一个包含相似电影和相关关键词的漂亮标签云。
我认为这应该可行,但效率非常、非常、非常低。
而且它也只有一个层次或关系。
一定有更好的方法来做到这一点,但是如何呢??
我基本上有一个实体集合。它们可以是不同的实体(电影、 Actor 、主题、情节关键词)等。
我也有他们之间的关系。
必须以某种方式有效地计算实体的“语义距离”。
我也想实现更多层次的关系。
但我完全被困住了。好吧,我尝试了不同的方法,但一切都以一些算法结束,这些算法需要很长时间才能计算,并且运行时间呈指数增长。
是否有针对此优化的可用数据库系统?
有人能指出我正确的方向吗?
最佳答案
你可能想要一个 RDF triplestore . Redland是一个很常用的,但它真的取决于你的需要。查询在 SPARQL 中完成,不是 SQL。另外...你必须喝语义网 koolaid。
关于sql - 如何高效构建和存储语义图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741863/