如何有效地构建和存储语义图?

The*_*can 1 mysql sql database algorithm semantics

网上冲浪我遇到Aquabrowser(无需点击,我会发布相关部分的图片).

它有一种很好的方式来呈现搜索结果和发现语义链接的实体.

这里是取自截图一个中的演示.

在左侧,您可以输入您输入的字词和相关字词.单击它们可以优化结果.

AQUA

现在作为一个示例项目,我有一个电影实体和主题的数据集(如wolrd-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
Run Code Online (Sandbox Code Playgroud)

这基本上应该选择所有也有关键字world-war-2的电影,然后查找theese电影所拥有的关键词,并选择最容易出现的关键词.

我认为使用theese关键词我可以选择最匹配的电影,并且有一个包含类似电影和相关关键字的漂亮标签云.

我认为这应该有效,但非常非常非常低效.

它也只有一个级别或关系.

必须有一个更好的方法来做到这一点,但如何?

我基本上有一组实体.它们可以是不同的实体(电影,演员,主题,情节关键词)等.

我也有他们之间的关系.

必须以某种方式有效地计算实体的"语义距离".

我也希望实现更多层次的关系.

但我完全陷入困境.好吧,我尝试了不同的方法,但一切都以某些算法结束,需要花费很长时间才能计算出来,并且运行时间呈指数级增长.

是否有针对此优化的数据库系统?

有人能指出我正确的方向吗?

Bob*_*man 5

您可能想要一个RDF三元组. Redland是一种非常常用的产品,但它确实取决于您的需求.查询是在SPARQL中完成的,而不是SQL.另外......你必须喝语义网络koolaid.